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

相关推荐
大模型码小白6 分钟前
告别造假数据,直接连数据库查真实时序数据喂给 TimechoAI 大模型
java·数据库·人工智能·microsoft·架构
晚安日记wanna10 分钟前
大表 DDL 面试翻车现场Online DDL 为什么还会锁死业务
数据库·面试·架构
IvorySQL11 分钟前
PostgreSQL 日报|建库策略致备库静默丢数据(9 月 12 日)
数据库·人工智能·postgresql
这个DBA有点耶12 分钟前
当Agent从“写SQL”变成“执行SQL”:数据库安全模型需要重新设计
数据库·aigc·dba
晚安日记wanna12 分钟前
MySQL 主从延迟别只答并行复制
数据库·面试·架构
qq_401700411 小时前
Qt QUrl 详解与代码示例
开发语言·数据库·qt
程序员阿鹏2 小时前
如何实现MySQL分库分表?
数据结构·数据库·sql·mysql·缓存
风哥2号2 小时前
数据库教程FGMT33‑MySQL主从复制项目实施与维护06(MySQL8.4/9.7 MGR组复制)
数据库·mysql
liangsheng_g2 小时前
Spring事务传播行为分派与挂起恢复源码实战
数据库·sql·spring
蓝速科技2 小时前
信创终端 POC 测试实战与选型避坑指南丨蓝速科技
运维·数据库·人工智能·科技·自然语言处理