【问题标题】: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,只是看起来有点丑。

【问题讨论】:

标签: sql oracle


【解决方案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()

【讨论】:

  • 你是上帝!这正是我一直在寻找的。能够简单地“过滤”一个表而不连接最小值或最大值。太棒了!
猜你喜欢
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
相关资源
最近更新 更多