sql - Oracle SQL -- 一个组上的分析函数?

标签 sql oracle greatest-n-per-group

我的表:

ID   NUM   VAL
1    1     Hello
1    2     Goodbye
2    2     Hey
2    4     What's up?
3    5     See you

如果我想返回每个 ID 的最大数量,它真的很好很干净:
SELECT MAX(NUM) FROM table GROUP BY (ID)

但是如果我想获取与每个 ID 的每个数字的最大值相关联的值怎么办?

为什么我不能这样做:
SELECT MAX(NUM) OVER (ORDER BY NUM) FROM table GROUP BY (ID) 

为什么这是一个错误?我想让这个选择按 ID 分组,而不是为每个窗口单独分区......

编辑:错误是“不是 GROUP BY 表达式”。

最佳答案

您可能可以使用 MAX() KEEP(DENSE_RANK LAST...)功能:

with sample_data as (
  select 1 id, 1 num, 'Hello' val from dual union all
  select 1 id, 2 num, 'Goodbye' val from dual union all
  select 2 id, 2 num, 'Hey' val from dual union all
  select 2 id, 4 num, 'What''s up?' val from dual union all
  select 3 id, 5 num, 'See you' val from dual)
select id, max(num), max(val) keep (dense_rank last order by num)
from sample_data
group by id;

关于sql - Oracle SQL -- 一个组上的分析函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10358986/

相关文章:

SQL 总和

sql - 如何使用SQL MAX函数获取一行的所有字段?

sql - Postgresql按列获取最大行组

mysql - SQL 连接以将主表中的值与子表值连接为一行中的不同列

sql - MySQL/PHP : keeping an extra record while paging

mysql - 连接两个表以从一个表获取 COUNT,从另一个表获取 SUM

ASP.NET Web API - Entity Framework - 500 内部服务器错误。包含(param => param.field)

java - 复制相互引用的嵌套对象

sql - Oracle sql中使用countif计算每一行

mysql - 使用 MAX DATE 和 GROUP BY 获取行