根据按另一列分组的不同列的max获取值

  • 本文关键字:获取 max 一列 sql oracle
  • 更新时间 :
  • 英文 :


我想根据另一列分组的不同列的max获得一列的值。

我有这个表:

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,它只是看起来有点丑。

您可以使用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()

最新更新