首页 > 解决方案 > 检索每组的第二高计数

问题描述

我有一张这样的桌子:

shopID    supplier    supply_count
1         a           12
1         b           10
1         c           8
1         d           7
2         b           12
2         f           12
2         e           10
3         b           5
3         a           2
4         f           15
4         c           11

我使用了 not in 函数,如下所示:

where supply_count NOT IN (select max(supply_count) from supply)

但是,只有第一行显示结果中的第二高值,其他行仍然显示最高计数:

shopID   supply_count
1        10
2        12
3        5
4        15

我的预期结果是为每个商店找到第二高的供应数量,如下所示:

shopID   supply_count
1        10
2        12
3        2
4        11

那么,有人有什么建议吗?谢谢!

标签: sqlgreatest-n-per-group

解决方案


利用row_number()

select shopid,supply_count
from
(
select shopID,supply_count,row_number() over(partition by shopID order by supply_count) as rn
from tablename
)A where rn=2 

推荐阅读