SQL Server 2008 四种排序函数
ROW_NUMBER()
为查询结果的每一行分配一个唯一的序号,序号从1开始递增。常用于分页或去除重复数据。
语法示例:
sql
SELECT
ROW_NUMBER() OVER (ORDER BY column_name) AS row_num,
column_name
FROM table_name;
特点:相同值的行会获得不同序号。
RANK()
为结果集中的行分配排名,相同值的行会获得相同排名,后续排名会跳过重复的序号。
语法示例:
sql
SELECT
RANK() OVER (ORDER BY column_name) AS rank,
column_name
FROM table_name;
特点:如两行并列第1,下一行直接排名第3。
DENSE_RANK()
与RANK()类似,但不会跳过重复排名后的序号。相同值的行排名相同,后续排名连续递增。
语法示例:
sql
SELECT
DENSE_RANK() OVER (ORDER BY column_name) AS dense_rank,
column_name
FROM table_name;
特点:如两行并列第1,下一行排名第2。
NTILE(n)
将结果集分成指定数量(n)的近似相等分组,并为每行分配所属组号。
语法示例:
sql
SELECT
NTILE(4) OVER (ORDER BY column_name) AS quartile,
column_name
FROM table_name;
特点:若总行数无法被n整除,前几个组会多一行。
使用场景对比
- ROW_NUMBER:需严格唯一序号时(如分页)。
- RANK:允许并列排名且后续序号跳跃(如比赛名次)。
- DENSE_RANK:允许并列排名但序号连续(如成绩分级)。
- NTILE:数据均匀分组(如将销售数据分为4个季度)。
所有函数均需配合OVER (ORDER BY ...)子句指定排序规则。