distinct sql用法_面试官:讲下MySQL中group by的3种用法 程序员:我思考下

编程、后端开发、面试的程序员、数据库、计算机软件、MySQL

吐槽

mysql的分组group by 在业务代码中使用非常频繁

我们来复习下

group by 含义

by后面跟指定的规则对数据进行分组,分组就是将一个“数据集”根据条件拆分若干“小数据集”,然后针对“小数据集”进行数据处理。

初始表数据

  • 表(一个职工表)
a4b27172f2959b7bc77efada867409ef.png
  • 数据
8a15c28dba315e40ecc5f93f69937604.png

用法1(去重)

distinct 可以去重,其实group by 也是自带去重效果的

如下我根据条件(部门)去重,我看了下默认是每个部门的第一条数据

实际业务一般分组都会配合聚合函数使用

867dc68ed50fe2c7210e965d35ee01da.png

用法2(配合聚合函数)

配合聚合函数一起计算

常见的5个聚合函数sum,max,min,avg,count

1830cafbba8d90e14284ca36c8c79e11.png
  • 统计每个部门工资最高的结果
73fdedb5fe1e57674ed809e73f594d72.png

用法3(配合HAVING)

f98d8df5bdd618df38b50eb2cbf79096.png

求每部门最高工资的员工

group by 配合max能轻松求出每部门最高工资,

但是求最高工资的员工信息就需要2张表关联查询了

0cd052a72eb0565681fbafba05f32c65.png

小白们切记不要以为这个SQL就是最终正确结果

除了salary、dept部门是正确的,其他字段是分组前默认第一条数据

所以如果你是顺序插入,到可以根据实际业务去1条SQL搞定(不推荐)。

bfbd2d5a8e2680e36bf1b916d9ef2b86.png

正确写法join

join写法性能最佳

实际业务这个 dept必须是索引才可以

38c100b00a7d8edb09dd6a0b6246e9a6.png

查单张表求最大工资方法

这里我是根据工资从大到小顺序插入的,

group by 后查出来的就是最大工资(默认第一条数据)

5d7d33ff204e97cc4678e7a75a826f5c.png

group by 字段 ORDER BY null

order by null真可以提升性能,请见如下MySQL执行计划

6f2e42e6157ff1c38dd7ae41131311cb.png

group by 总结

  • 1 group by返回的数据是有序的,如果不想排序浪费资源可以后面跟 ORDER BY null,执行计划可能会少一个Using filesort
  • select 行(原则上只能是分组列或函数列),但由于版本问题,可能会输出第一行的其他字段数据
  • 配合聚合函数统计出来的

编程、后端开发、面试的程序员、数据库、计算机软件、MySQL

以上皆为个人理解,如果有理解错的地方,欢迎专家指出

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值