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

SQL Server中RANK()函数:处理并列排名与自然跳号

  RANK()是SQL Server的窗口函数,为结果集中的行生成排名。当出现相同值时,后续排名会跳过被占用的名次,形成自然间隔。与DENSE_RANK()的关键区别在于是否允许排名值连续

       语法:

RANK() OVER (
    [PARTITION BY 分组列]
    ORDER BY 排序列 [ASC|DESC]
)
  • PARTITION BY:按指定列分组后分别计算排名

  • ORDER BY:决定排名的排序规则 

        例子1:基础排名(自然跳号)

-- 创建学生成绩表
CREATE TABLE ExamScores (
    Student NVARCHAR(50),
    Score INT
);

INSERT INTO ExamScores VALUES
('张三', 95),
('李四', 88),
('王五', 95),
('赵六', 80);

-- 使用RANK()按分数降序排名
SELECT 
    Student,
    Score,
    RANK() OVER (ORDER BY Score DESC) AS Rank
FROM ExamScores;

        结果:

       可以看到rank那一列没有“2”,因为前边有两个“1”,这就是rank函数,会跳过2。

       示例2:分组排名(部门内排名)

-- 创建销售数据表
CREATE TABLE ProductSales (
    Category NVARCHAR(50),
    Product NVARCHAR(50),
    Sales INT
);

INSERT INTO ProductSales VALUES
('电子产品', '手机', 1200),
('电子产品', '耳机', 800),
('服装', 'T恤', 600),
('服装', '外套', 600);

-- 按商品类别分组,组内按销量排名
SELECT 
    Category,
    Product,
    Sales,
    RANK() OVER (
        PARTITION BY Category
        ORDER BY Sales DESC
    ) AS CategoryRank
FROM ProductSales;

何时使用RANK()?

  • 需要反映自然名次间隔
    例如:奥运会奖牌排名(两个金牌后,下一名是铜牌)

  • 允许并列但保留原始名次逻辑
    例如:考试排名(两人并列第1,下一人直接第3名)


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

相关文章:

  • Apache SeaTunnel 整体架构运行原理
  • 【Ubuntu】ARM交叉编译开发环境解决“没有那个文件或目录”问题
  • 【LeetCode】152、乘积最大子数组
  • HTML应用指南:利用GET请求获取全国盒马门店位置信息
  • Day37-【13003】短文,串的基本概念,匹配算法,算法时间复杂度,真题训练
  • 【工具篇】深度剖析 Veo2 工具:解锁 AI 视频创作新境界
  • tomcat如何配置保存7天滚动日志
  • NLP知识点
  • 7-1 什么是机器学习
  • C语言数据结构编程练习-排序算法
  • 2.1-STL库中string类的模拟实现
  • DIY Shell:探秘进程构建与命令解析的核心原理
  • 蓝桥杯小白打卡第二天
  • 【大模型LLM面试合集】大语言模型架构_Transformer架构细节
  • java高级工程师面试题_java高级工程师面试题及答案解析
  • 【原子工具】快速幂 快速乘
  • 基于Flask的商城应用系统的设计与实现
  • vscode中的编辑器、终端、输出、调试控制台(转载)
  • 大数据系统文件格式ORC与Parquet
  • 算法设计-四后问题(C++)
  • 力扣54螺旋矩阵
  • 6 加密技术与认证技术
  • solidity高阶 -- 调用接口合约
  • AWS App2Container
  • C#Halcon差异分类模型
  • 深度学习篇---深度学习中的超参数张量转换模型训练