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

相关推荐
IpdataCloud37 分钟前
跨区服玩家延迟高怎么办?用IP离线库自动分配到最近服务器
数据库·tcp/ip·github·php·ip
wuqingshun3141592 小时前
MYSQL默认的事务隔离级别是什么?为什么选择这个级别?
数据库·mysql
空中湖2 小时前
电池简史(五):极限之梦与终章——锂硫、锂空气、量子电池,以及你该知道的电池投资与生活指南
数据库·程序人生
蓝胖子酱3 小时前
在 Electron 中用 electron-store 实现加密存储与自定义格式文件
前端·javascript·数据库
snow@li4 小时前
Redis:数据库语法速查表 / 全景梳理
数据库·redis·缓存
Devlive 开源社区4 小时前
Nebula 1.6.0 发布:跨区域桶自动路由、秒传、文本/PDF 预览一次到位
数据库·sql
这个DBA有点耶4 小时前
导个数据中文全变问号?字符集这事儿真没那么简单
数据库·mysql·代码规范
wuqingshun3141595 小时前
MYSQL中如果发生死锁应该如何解决?
数据库·mysql
DO_Community5 小时前
Weaviate 托管数据库现已在 DigitalOcean 上开放公测
数据库·人工智能·开源·向量数据库·weaviate
报错小能手5 小时前
索引常见面试题
数据库