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

Get value based on max of a different column grouped by another column(根据由另一列分组的不同列的最大值获取值)
本文介绍了根据由另一列分组的不同列的最大值获取值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想根据由另一列分组的不同列的最大值来获取列的值.

I want to get the values of a column based on max of a different column grouped by another column.

我有这张桌子:

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

我实际上可以使用这个查询来获取它.

I could actually use this query to get it.

select KEY, VAL
from TABLE_NAME TN
where NUM = (
    select max(NUM)
    from TABLE_NAME TMP
    where TMP.KEY = TN.KEY
    )

但是在 ORACLE SQL(10g 或以上)中有更优雅的方式来获得结果吗?

However is there a more elegant way in ORACLE SQL (10g or above) to get the result?

背后的原因是实际上有多个KEY,只是看起来有点难看.

Reason behind it is that there are actually multiple KEYs and it just looks a bit ugly.

推荐答案

您可以使用 row_number() 来解决这个问题:

You can approach this using 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;

你是否认为这更优雅"可能是一个品味问题.

Whether you consider this more "elegant" is probably a matter of taste.

我应该指出,这与您的查询略有不同.这保证为每个 key 返回一行;你的可以返回多行.如果您想要这种行为,只需使用 rank()dense_rank() 而不是 row_number().

I should point out that this is subtly different from your query. This is guaranteed to return one row for each key; yours could return multiple rows. If you want that behavior, just use rank() or dense_rank() instead of row_number().

这篇关于根据由另一列分组的不同列的最大值获取值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)