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