编程、后端开发、面试的程序员、数据库、计算机软件、MySQL
吐槽
mysql的分组group by 在业务代码中使用非常频繁
我们来复习下
group by 含义
by后面跟指定的规则对数据进行分组,分组就是将一个“数据集”根据条件拆分若干“小数据集”,然后针对“小数据集”进行数据处理。
初始表数据
- 表(一个职工表)
- 数据
用法1(去重)
distinct 可以去重,其实group by 也是自带去重效果的
如下我根据条件(部门)去重,我看了下默认是每个部门的第一条数据
实际业务一般分组都会配合聚合函数使用
用法2(配合聚合函数)
配合聚合函数一起计算
常见的5个聚合函数sum,max,min,avg,count
- 统计每个部门工资最高的结果
用法3(配合HAVING)
求每部门最高工资的员工
group by 配合max能轻松求出每部门最高工资,
但是求最高工资的员工信息就需要2张表关联查询了
小白们切记不要以为这个SQL就是最终正确结果
除了salary、dept部门是正确的,其他字段是分组前默认第一条数据,
所以如果你是顺序插入,到可以根据实际业务去1条SQL搞定(不推荐)。
正确写法join
join写法性能最佳
实际业务这个 dept必须是索引才可以
查单张表求最大工资方法
这里我是根据工资从大到小顺序插入的,
group by 后查出来的就是最大工资(默认第一条数据)
group by 字段 ORDER BY null
order by null真可以提升性能,请见如下MySQL执行计划
group by 总结
- 1 group by返回的数据是有序的,如果不想排序浪费资源可以后面跟 ORDER BY null,执行计划可能会少一个Using filesort
- select 行(原则上只能是分组列或函数列),但由于版本问题,可能会输出第一行的其他字段数据
- 配合聚合函数统计出来的
编程、后端开发、面试的程序员、数据库、计算机软件、MySQL