当前位置:网站首页>MySQL分组后排序
MySQL分组后排序
2022-08-02 03:18:00 【egegerhn】
文章目录
前言
之前有遇到需要求分组后排序的问题,记录记录
问题
求公司各部门内工资最高的人
一、使用group by
实例代码:
select a.dept_no,a.name,a.salary
from (
select dept_no,name,salary
from employee
order by salary desc
limit 1000) a
group by a.dept_no
必须要使用limit,因为mysql 5.6之后版本对排序的sql解析做了优化,子查询中的排序是会被忽略的,所以上面的order by salary desc会失效,需要用limit来避免这种优化。
二、使用窗口函数
示例代码:
select a.dept_no,a.name,a.salary
from(
select
dept_no,name,salary,
ROW_NUMBER() OVER(partition by dept_no order by salary desc) as num
from employee) a
where a.num=1
ROW_NUMBER() OVER(partition by dept_no order by salary desc)
表示根据dept_no分组,在分组内部根据 salary排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)
最后取每组第一个值
三、窗口函数和group by
个人理解:
group by 通常配合聚合函数使用,如果没有配合聚合函数,直接会取每组第一条数据。
窗口函数不会改变数据的总条数,只是在每条数据的前面加了一个组内编号。
总结
实现组内排序的方式有很多种,可用group by或者窗口函数,个人推荐使用窗口函数。感觉使用group by 和limit 的方式,不太方便,需要控制limit的行数。
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢
小程序(开发必备常识)1
[Remote Control Development Basic Tutorial 3] Crazy Shell Open Source Formation UAV-ADC (Joystick Control)
Hit the programmer interview scene: What did Baidu interviewers ask me?
OD-Model【4】:SSD
MySQL8.0.28 installation tutorial
PHP WebSehll backdoor script and detection tool
PHP WebShell Free Kill
AntV X6制作画板工具(图形,线段,图片上传)
Using WebShell to get Shell Skills
MySql中的like和in走不走索引
随机推荐
ROS2自学笔记:launch文件完整编写流程
MySQL中的存储过程(详细篇)
Reasons and solutions for Invalid bound statement (not found)
Double Strings (别总忘记substr)
Flexbox flex property
Lua安装及常用命令使用
「PHP基础知识」PHP中对象的使用
LeetCode:1374. 生成每种字符都是奇数个的字符串【签到题】
(转帖)HashCode总结(1)
C语言力扣第47题全排列 II。搜索回溯
【C语言万字长文】 宏定义 结构体 共用体 内存对齐知识点总结
RHCSA第二天
腾讯50题
黑马案例--实现 clock 时钟的web服务器
ModuleNotFoundError: No module named ‘openpyxl‘
Webshell upload method
Day34 LeetCode
一种基于行为空间的回声状态网络参数优化方法
Heao Technology Network Interview (with reference answers)
LeetCode:1161. 最大层内元素和【BFS层序遍历】