SQL Server 2008 四种排序函数

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 ...)子句指定排序规则。

相关推荐
柚子+2 小时前
Appium+python+雷电模拟器自动化测试入门
数据库·python·appium
云边有个稻草人2 小时前
SQL调优实战手册:索引、并行、参数调优一站式解决方案
数据库
数安3000天2 小时前
数据脱敏产品需要关注哪些因素?
数据库
杰克尼2 小时前
知识点总结--day05( 数据库)
数据库
代码派2 小时前
SQL 审核解决了部分问题,另一部分是慢 SQL 治理
数据库·sql·mysql·数据库管理工具·ninedata·sql审核·sql治理
wei_shuo3 小时前
新型电力系统应该用什么数据库?源网荷储四侧的时序数据库选型与落地实战
数据库·时序数据库
SadSunset3 小时前
第四章:Redis 数据结构与命令
数据结构·数据库·redis
带娃的IT创业者3 小时前
家庭成员管理系统:SQLite 关系型数据库建模实战
jvm·数据库·sqlite·关系型数据库·crud·家庭成员
高溪流3 小时前
4.mysql表约束 及 mysql库表设计范式
数据库·mysql·约束