根据由另一列分组的不同列的最大值获取值[重复]

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或以上)有没有更优雅的方式来获取结果?

原因是实际上有多个KEYs,只是看起来有点丑。

【问题讨论】:

仅适用于搜索 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()

【讨论】:

你是上帝!这正是我一直在寻找的。能够简单地“过滤”一个表而不连接最小值或最大值。太棒了!

以上是关于根据由另一列分组的不同列的最大值获取值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Mysql,如何使用另一列的最大值对一组行进行分组?

根据火花数据框中另一列的值查找列的最大值?

如何根据R中另一列的日期(月/日/年)计算列的年/月平均值、最大值、最小值等

在 DataFrame.groupby 的情况下,如何根据另一列的最大值获取列的值

按一列分组并在熊猫中找到另一列的总和和最大值

基于另一列的最大值的列上的 SQL 内连接 [重复]