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

相关推荐
znnnk9 小时前
数据库被AI“重写”:2026,从CPU中心走向GPU中心
数据库·人工智能·oracle
微微%9 小时前
mysql的安装和使用
数据库·mysql·mysql8安装
软件派11 小时前
MiniMax M3.1 Flash 高频业务落地实战指南
大数据·数据库·人工智能
云边云科技_云网融合11 小时前
连锁门店组网怎么做?SD-WAN 多分支组网的架构选型、部署与成本结构
服务器·数据库·php
泡海椒12 小时前
# 深度解析JQuick-SQL Join重排序与哈希连接执行机制
数据库·sql·哈希算法
acrel712 小时前
医院用电隐患治理与节能降耗及智慧能源平台应用
网络·数据库
snow@li12 小时前
PowerDesigner 全景教程:从业务建模、表结构设计、关系管理到正向/逆向、文档输出
数据库
ss27313 小时前
PostgreSQL表级锁、行级锁、轻量级锁
数据库·postgresql·区块链
RacentCLM13 小时前
证书即服务CaaS:从申请、续期到部署的自动化链路拆解
运维·数据库·自动化·ssl
SelectDB13 小时前
安全评审卡了三周,我把部署形态的四种选项重新排了一遍
大数据·数据库·云原生