很多时候我们查询数据都是查询最大值或者最小值,一般都是利用Max或者Min函数来实现,一般很少求次大值的,其实实现也很简单,记录一下为大家提供一下思路,这篇博客介绍一下利用ROW_NUMBER PARTITION BY怎么求次大值(次小值)。
测试数据:
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([Name] nvarchar(22),[Score] int)
Insert #T
select N'张三',80 union all
select N'张三',90 union all
select N'张三',100 union all
select N'李四',60 union all
select N'李四',65 union all
select N'李四',70 union all
select N'李四',75
Go
--测试数据结束
实现方式:
;WITH cte AS (
Select *,ROW_NUMBER()OVER(PARTITION BY Name ORDER BY Score DESC) rn from #T
)
SELECT * FROM cte WHERE cte.rn=2
结果:


本文介绍了一种使用SQL的ROW_NUMBER和PARTITION BY函数查询次大值的方法,通过创建临时表并插入测试数据,演示了如何筛选出特定条件下的次大值,适用于需要进行排名或比较的数据分析场景。
1493

被折叠的 条评论
为什么被折叠?



