1. row_number
假設有一批數據,如下
aaa 1
aaa 2
aaa 3
aaa 4
aaa 5
aaa 6
bbb 7
bbb 8
bbb 9
現在我要根據第一個字段分組,組內根據第二個字段降序,並且組內取降序前3個數字,實現sql如下
select
t.f1, t.f2, t.rn
from
(
select
f1, f2, row_number() over(partition by f1 order by f2 desc) rn
from tab
) t
where rn < 4
結果如下:
f1 f2 rn
aaa 6 1
aaa 5 2
aaa 4 3
bbb 9 1
bbb 8 2
bbb 7 3