当前位置: 首页 > article >正文

SQL Server中DENSE_RANK()函数:简洁处理连续排名

什么是DENSE_RANK?

    DENSE_RANK()是SQL Server中的窗口函数,用于为结果集中的行生成无间隔的连续排名。与RANK()不同,当遇到相同值时,后续排名不会跳过数字。前一篇已经介绍了rank的用法,这次介绍一下dense_rank。

DENSE_RANK() OVER (
    [PARTITION BY 列]
    ORDER BY 排序列 [ASC|DESC]
)
  • PARTITION BY:分组计算排名

  • ORDER BY:决定排名顺序

示例1:基础排名(处理相同值)

-- 创建示例表
CREATE TABLE Sales (
    Salesperson NVARCHAR(50),
    Amount INT
);

INSERT INTO Sales VALUES
('Alice', 2000),
('Bob', 1500),
('Charlie', 2000),
('David', 1800);

-- 使用DENSE_RANK
SELECT 
    Salesperson,
    Amount,
    DENSE_RANK() OVER (ORDER BY Amount DESC) AS Rank
FROM Sales;

示例2:分组排名(PARTITION BY)

-- 创建员工表
CREATE TABLE Employees (
    Department NVARCHAR(50),
    Name NVARCHAR(50),
    Salary INT
);

INSERT INTO Employees VALUES
('IT', 'John', 8000),
('IT', 'Jane', 9000),
('HR', 'Mike', 7500),
('HR', 'Emily', 7500);

-- 按部门分组排名
SELECT 
    Department,
    Name,
    Salary,
    DENSE_RANK() OVER (
        PARTITION BY Department
        ORDER BY Salary DESC
    ) AS DeptRank
FROM Employees;

何时使用?

  • 需要处理并列排名时保持连续数字

  • 例如:成绩排名(允许并列第1名,下一个保持第2名)

  • 对比:当需要允许排名间隔时使用RANK()


http://www.kler.cn/a/532077.html

相关文章:

  • SQLModel入门
  • 求水仙花数,提取算好,打表法。或者暴力解出来。
  • 自动化构建-make/Makefile 【Linux基础开发工具】
  • Kamailio、MySQL、Redis、Gin后端、Vue.js前端等基于容器化部署
  • ubuntu解决普通用户无法进入root
  • Jenkins 触发构建的几种常见方式
  • 数据结构:树和二叉树概念_堆篇
  • apikey存储方案探秘(deepseek-R1对话)
  • 九. Redis 持久化-RDB(详细讲解说明,一个配置一个说明分析,步步讲解到位)
  • RabbitMQ深度探索:死信队列
  • PHP开发小记-消息推送
  • 《深度揭秘LDA:开启人工智能降维与分类优化的大门》
  • Android学习21 -- launcher
  • 设计一个特殊token以从1亿词表中动态采样8192个词来表达当前序列
  • CSS工程化概述
  • MFC程序设计(八)动态创建机制
  • mysql不同种类时间字段的区别
  • Linux ifstat 命令使用详解
  • qt-Quick笔记之Dark Mode And Light Mode In Application
  • 应对现代电子商务的网络威胁—全面安全战略
  • (脚本学习)BUU18 [CISCN2019 华北赛区 Day2 Web1]Hack World1
  • 自制小动画
  • 基于开源2 + 1链动模式AI智能名片S2B2C商城小程序的内容创作与传播效能探究
  • ubuntu 网络管理--wpa_supplicant、udhcpc
  • Block Blaster Online:免费解谜游戏的乐趣
  • 如何不更新application.yml而更新spring的配置