我的表:
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/