如何根据选定的列而不是Oracle中表的所有列获取不同的行
Posted
技术标签:
【中文标题】如何根据选定的列而不是Oracle中表的所有列获取不同的行【英文标题】:How to get distinct rows based on selected columns instead of all columns of a table in Oracle 【发布时间】:2019-02-13 11:37:47 【问题描述】:我正在尝试获取第一个不同的 3 列,而最后一列可以具有任何值。如果我在所有列上都不同,那么它会给我 8 行。该表是动态的,因此我需要不同的 3 列和最后一列中的任何值。
我有以下场景,
Name Surname Road Pet
John Trav John_road dog
Kaley Couco Couco_road horse
Charlie Sheen Sheen_road rabbit
Johnny Galecki Galecki_road cat
John Trav John_road donkie
Kaley Couco Couco_road mouse
Charlie Sheen Sheen_road goat
Johnny Galecki Galecki_road pig
想要的结果:
Name Surname Road Pet
John Trav John_road dog
Kaley Couco Couco_road mouse
Charlie Sheen Sheen_road rabbit
Johnny Galecki Galecki_road cat
我尝试了此链接上的解决方案,但它不起作用:
Oracle 11g SQL to get unique values in one column of a multi-column query
请在 Oracle 中提供帮助
【问题讨论】:
【参考方案1】:由于您不关心最后一列的值,一个简单的选择是将其聚合为
select name, surname, road, max(pet)
from your_table
group by name, surname, road
【讨论】:
【参考方案2】:使用row_number()
和partition by
前三列:
dbfiddle demo
select *
from (
select t.*,
row_number() over (partition by Name, Surname, Road order by pet) rn
from t)
where rn = 1
【讨论】:
【参考方案3】:你试过了吗
SELECT NAME, SURNAME, rOAD, PET FROM
(
SELECT NAME, SURNAME, rOAD, PET, ROW_NUMBER () OVER (PARTITION BY NAME, SURNAME, rOAD ORDER BY PET) RN FROM FROM TABLE_NAME
) WHERE RN=1
【讨论】:
以上是关于如何根据选定的列而不是Oracle中表的所有列获取不同的行的主要内容,如果未能解决你的问题,请参考以下文章
根据 SQL Server 2008R2 中表中的列获取计数
Django ORM:如何根据所有记录中的列获取唯一记录(需要模型对象而不是特定值对象)