根据由另一列分组的不同列的最大值获取值[重复]
Posted
技术标签:
【中文标题】根据由另一列分组的不同列的最大值获取值[重复]【英文标题】:Get value based on max of a different column grouped by another column [duplicate] 【发布时间】:2015-12-11 16:05:33 【问题描述】:我想根据由另一列分组的不同列的最大值来获取列的值。
我有这张桌子:
KEY NUM VAL
A 1 AB
B 1 CD
B 2 EF
C 2 GH
C 3 HI
D 1 JK
D 3 LM
想要这个结果:
KEY VAL
A AB
B EF
C HI
D LM
我实际上可以使用这个查询来获取它。
select KEY, VAL
from TABLE_NAME TN
where NUM = (
select max(NUM)
from TABLE_NAME TMP
where TMP.KEY = TN.KEY
)
但是ORACLE SQL(10g或以上)有没有更优雅的方式来获取结果?
原因是实际上有多个KEY
s,只是看起来有点丑。
【问题讨论】:
仅适用于搜索 samish 事物的人...尤其是当您无法使用嵌套查询时,(因为 asktom.oracle.com/pls/apex/…),您可以在这里查看:***.com/questions/65866812/… 【参考方案1】:您可以使用row_number()
:
select key, val
from (select t.*, row_number() over (partition by key order by num desc) as seqnum
from table_name t
) t
where seqnum = 1;
您是否认为这更“优雅”可能是品味问题。
我应该指出,这与您的查询略有不同。这保证为每个key
返回一行;你的可以返回多行。如果您想要这种行为,只需使用 rank()
或 dense_rank()
而不是 row_number()
。
【讨论】:
你是上帝!这正是我一直在寻找的。能够简单地“过滤”一个表而不连接最小值或最大值。太棒了!以上是关于根据由另一列分组的不同列的最大值获取值[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何根据R中另一列的日期(月/日/年)计算列的年/月平均值、最大值、最小值等