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

相关推荐
数智顾问5 分钟前
(133页PPT)数据中心基础设施规划设计(附下载方式)
大数据·数据库·人工智能
l1t9 分钟前
DeepSeek总结的PostgreSQL 的开源 TDE:pg_tde
数据库·postgresql·开源
南极企鹅10 分钟前
深入理解 MVCC:数据库并发控制的基石
java·数据库·mysql
欧神附体12310 分钟前
MYSQL数据库集群高可用和数据监控平台项目
数据库·mysql
abcy07121325 分钟前
python在models定义了一个对象,接口调用时报错对象不存在models.xx.DoesNotExist
数据库·sqlite
無限進步D39 分钟前
MySQL 数据处理之增删改
数据库·mysql
我,也来自江湖40 分钟前
Redis的持久化有哪些方式
数据库·redis·缓存
兆。1 小时前
LangChain向量数据库集成指南:面向RAG开发者
数据库·langchain
小小工匠1 小时前
Redis - 实现分页 + 多条件模糊查询:一套完整可落地的组合方案
数据库·redis·缓存·分页·模糊查询
流星白龙1 小时前
【MySQL高阶】13.其他存储引擎
android·数据库·mysql