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

MySQL中rank()、row_number()、dense_rank()排序

MySQL中的序号函数

环境:MySQL 8.0

脚本准备:

CREATE TABLE `player_score` (

  `id` int NOT NULL AUTO_INCREMENT,

  `name` varchar(50) COMMENT '姓名',

  `score` int NOT NULL DEFAULT '0' COMMENT '得分',

  `created_at` datetime DEFAULT NULL COMMENT '创建时间',

  PRIMARY KEY (`id`) USING BTREE

) ENGINE=InnoDB;



INSERT INTO `player_score` (`name`, `score`, `created_at`) VALUES ('詹姆斯', 40, NOW());

INSERT INTO `player_score` (`name`, `score`, `created_at`) VALUES ('格林', 10, NOW());

INSERT INTO `player_score` (`name`, `score`, `created_at`) VALUES ('库里', 35, NOW());

INSERT INTO `player_score` (`name`, `score`, `created_at`) VALUES ('克莱', 25, NOW());

INSERT INTO `player_score` (`name`, `score`, `created_at`) VALUES ('戴维斯', 40, NOW());

INSERT INTO `player_score` (`name`, `score`, `created_at`) VALUES ('杜兰特', 35, NOW());

sql执行:

select id, name, score,

RANK() over(order by score desc) as rank_,

DENSE_RANK() over(order by score desc) as dense_rank_,

ROW_NUMBER() over(order by score desc) as row_number_

from player_score

结论:

row_number() 顺序排序:对数据中的序号进行顺序显示,不管其排序结果是否出现重复值,排序结果为1,2,3,4,5…

rank() 并列排序:相同字段数值并列排序,且跳过重复序号,如, 1,1,3,4,5 。rank函数没有参数,但需要指定按照那个字段进行排名,所以使用rank函数必须用order by参数,order by的排序字段就是排名字段

dense_rank() 并列排序:相同字段数值并列排序,且不跳过重复序号,如:1,1,2,3,4


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

相关文章:

  • 【Elasticsearch】运行时字段(Runtime Fields)索引时定义运行时字段
  • CES Asia 2025:构建长效价值运营体系,赋能科技产业新发展
  • 游戏引擎学习第103天
  • 利用prompt技术结合大模型对目标B/S架构软件系统进行测试
  • docker 的使用
  • 第6章 6.4 ASP.NET Core Web API各种技术及选择
  • 常用共轭先验分布
  • DeepSeek 概述与本地化部署【详细流程】
  • Spring Cache 详细讲解
  • 国产化替代大势所趋,ARM工控机的未来之路
  • 二级C语言题解:函数指针的操作、单链表偶数结点值累加、判断回文
  • ES的java操作
  • 20240911 光迅科技 笔试
  • QT设备树,具有设备树过滤功能
  • MATLAB中的APPdesigner绘制多图问题解析?与逻辑值转成十进制
  • 【Map vs Set】:Java数据存储的“双子星”对决
  • foobar2000设置DSP使用教程及软件推荐
  • Vue.js 实现树形结构管理系统的前端设计与实现
  • 梨花声音研修院:回南天的生活技巧与注意事项
  • python环境中pip指令Did not provide a command报错解决方法