当前位置:网站首页>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开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢
随机推荐
Good Key, Bad Key (思维,临项交换,经典方法)
MySQL中根据日期进行范围查询
嵌入式分享合集25
dropout
构造方法、方法重载、全局变量与局部变量
MySQL8.0.26 installation and configuration tutorial (windows 64-bit)
Lua安装及常用命令使用
ROS2自学笔记:launch文件完整编写流程
Heao Technology Network Interview (with reference answers)
Redis的集群模式
2022ACM夏季集训周报(五)
STL入门基础 map和set容器
代码随想录笔记_哈希_383赎金信
rem适配
day11--shell脚本
2022.7.30 js笔记 运算符和流程控制符、循环
py0_二十一天计划书
三维数字孪生引擎与实景互动,案例解析
精益思想如何加速企业的全局价值流动?
第十一天&shell脚本