C#高级:数据库中使用SQL作分组处理5(Rank() 排名函数)
一、定义
排名函数:为结果集中的行分配排名序号
二、场景
假设存在
学生成绩表:ID StuID Score Time
我需要查询
1.值同跳号:ScoreRank StuID Score (分组依据:时间,排名依据:分数)
2.值同不跳号:ScoreRank StuID Score (分组依据:时间,排名依据:分数)
三、SQL
查询结果 1(值同跳号)
-- 1. 值同跳号(RANK)
SELECT RANK() OVER (PARTITION BY Time ORDER BY Score DESC) AS ScoreRank,StuID,Score,Time
FROM 学生成绩表
ORDER BY Time, ScoreRank, StuID;
查询结果 2(值同不跳号)
-- 2. 值同不跳号(DENSE_RANK)
SELECT DENSE_RANK() OVER (PARTITION BY Time ORDER BY Score DESC) AS ScoreRank,StuID,Score,Time
FROM 学生成绩表
ORDER BY Time, ScoreRank, StuID;
结果对比
RANK按条数排,名次可能跳跃;DENSE_RANK按分数档排,名次连续递增。本质是“计条数”还是“计档”之别。