Jer*_*emy 11 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
Run Code Online (Sandbox Code Playgroud)
如果我想返回每个ID的最大数量,它真的很干净:
SELECT MAX(NUM) FROM table GROUP BY (ID)
Run Code Online (Sandbox Code Playgroud)
但是,如果我想获取与每个ID的每个数字的最大值相关联的值,该怎么办?
为什么我不能这样做:
SELECT MAX(NUM) OVER (ORDER BY NUM) FROM table GROUP BY (ID)
Run Code Online (Sandbox Code Playgroud)
为什么这是一个错误?我希望这个选择按ID分组,而不是为每个窗口单独分区...
编辑:错误是"不是GROUP BY表达式".
Wol*_*olf 15
你可以使用这个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;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
29848 次 |
最近记录: |