备注:测试数据库版本为MySQL 8.0
如需要scott用户下建表及录入数据语句,可参考:
scott建表及录入数据sql脚本
一.需求
给表EMP中的工资分等级,并允许捆绑,返回下列结果集:
±----±--------+
| rnk | sal |
±----±--------+
| 1 | 800.00 |
| 2 | 950.00 |
| 3 | 1100.00 |
| 4 | 1250.00 |
| 4 | 1250.00 |
| 5 | 1300.00 |
| 6 | 1500.00 |
| 7 | 1600.00 |
| 8 | 2450.00 |
| 9 | 2850.00 |
| 10 | 2975.00 |
| 11 | 3000.00 |
| 11 | 3000.00 |
| 12 | 5000.00 |
±----±--------+
二.解决方案
窗口函数会使等级查询简单。如果暂不支持窗口函数,可以使用标量子查询
2.1 子查询方法
select (select count(distinct b.sal)
from emp b
where b.sal <= a.sal) as rnk,
a.sal
from emp a
复制
测试记录
mysql> select (select count( b.sal) -> from emp b -> where b.sal <= a.sal) as rnk, -> a.sal -> from emp a; +------+---------+ | rnk | sal | +------+---------+ | 1 | 800.00 | | 8 | 1600.00 | | 5 | 1250.00 | | 11 | 2975.00 | | 5 | 1250.00 | | 10 | 2850.00 | | 9 | 2450.00 | | 13 | 3000.00 | | 14 | 5000.00 | | 7 | 1500.00 | | 3 | 1100.00 | | 2 | 950.00 | | 13 | 3000.00 | | 6 | 1300.00 | +------+---------+ 14 rows in set (0.00 sec)
复制
2.2 MySQL 8.0 窗口函数方法
select dense_rank() over w as 'rnk', sal
from emp
window w as (order by sal)
;
复制
测试记录
mysql> select dense_rank() over w as 'rnk', sal -> from emp -> window w as (order by sal) -> ; +-----+---------+ | rnk | sal | +-----+---------+ | 1 | 800.00 | | 2 | 950.00 | | 3 | 1100.00 | | 4 | 1250.00 | | 4 | 1250.00 | | 5 | 1300.00 | | 6 | 1500.00 | | 7 | 1600.00 | | 8 | 2450.00 | | 9 | 2850.00 | | 10 | 2975.00 | | 11 | 3000.00 | | 11 | 3000.00 | | 12 | 5000.00 | +-----+---------+ 14 rows in set (0.00 sec)
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
墨天轮个人数说知识点合集
JiekeXu
428次阅读
2025-04-01 15:56:03
MySQL数据库当前和历史事务分析
听见风的声音
420次阅读
2025-04-01 08:47:17
MySQL 生产实践-Update 二级索引导致的性能问题排查
chengang
380次阅读
2025-03-28 16:28:31
MySQL 9.3 正式 GA,我却大失所望,新特性亮点与隐忧并存?
JiekeXu
344次阅读
2025-04-15 23:49:58
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
344次阅读
2025-04-17 17:02:24
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
326次阅读
2025-04-15 14:48:05
云和恩墨杨明翰:安全生产系列之MySQL高危操作
墨天轮编辑部
305次阅读
2025-03-27 16:45:26
openHalo问世,全球首款基于PostgreSQL兼容MySQL协议的国产开源数据库
严少安
289次阅读
2025-04-07 12:14:29
记录MySQL数据库的一些奇怪的迁移需求!
陈举超
191次阅读
2025-04-15 15:27:53
[MYSQL] 服务器出现大量的TIME_WAIT, 每天凌晨就清零了
大大刺猬
179次阅读
2025-04-01 16:20:44