MySQL 基础之五:其他过滤方式
![MySQL基础之五:其他过滤方式](https://static001.geekbang.org/infoq/d9/d918f8a6016d9bc91e2e538cd4d43ebb.jpeg)
重点内容:
本文将介绍几个过滤方式,比如空处理函数,分组关键字和 having 关键字。
ifnull()空处理函数:
小贴士:它是一个单行处理函数,并且数据库规定:有 NULL 参与的运算,结果一定是 NULL。
ifnull()空处理函数:括号里的参数:(可能为 NULL 的数据,被当做什么处理)。
先来检验一下有 NULL 参与的运算:想要求出每一个人的一年的奖金是多少?
![](https://static001.geekbang.org/infoq/d8/d8933eb1a352f31aa8f0ea1e46af4496.png)
一个人的年奖金是 NULL 不太合适吧,最少也是 0,因此如何过滤掉这些 NULL 值,并把它替换为合适的值呢?这个时候 ifnull()空处理函数就上场了。那现在就用这个函数处理一下上面的数据吧。
![](https://static001.geekbang.org/infoq/aa/aad859d1d8ce5290ddb8c34f7ac481e6.png)
再看上面的数据是不是就顺眼多了,在 SQL 语句中,我把 comm 字段中为 NULL 值的都替换为 0。是不是很方便呢!
group by:
首先来解释一下这个关键字的意义:按照某个字段或者某些字段进行分组。请注意这里的分组不是上一篇介绍的分组函数哦。那它有啥用呢?先来感受下:
想要知道每个种类工作的最高薪资,该怎么写 SQL 语句呢?
![](https://static001.geekbang.org/infoq/00/0043af4e1a3a2404cf8cdcb49eac4d76.png)
查询起来是不是很爽?先按照工作类型进行分组,然后再在每一小组中找出这个小组的最高薪资。
小贴士 1:当一条语句中有 group by 的话,select 后面只能跟分组函数和参与分组的字段-=-很重要哦
小贴士 2:分组函数一般在 group by 执行完之后再执行。
having:
这个关键字是在 group by 进行分组之后的数据进行再次过滤。
比如:求出每个部门的最高薪资,并且要求只有薪资大于 1500 的才显示出来
![](https://static001.geekbang.org/infoq/76/76d80e2fda0033d6c91198c37bdbfe45.png)
但是一般我们不这样写,因为要在 having 里要重复计算筛选一遍 max,效率比较低。既然要求薪资大于 1500 的才显示出来,为什么不一开始在 where 中就把薪资大于 1500 的先找出来,然后再进行分组,这样处理的数据就少些,效率就高一点。
![](https://static001.geekbang.org/infoq/d9/d9c14927dd7b049a2ff12ddcf6bba0b9.png)
两个的结果是一样的。
查询结果去重(distinct):
下面再来介绍一个关键字 distinct,作用就是:去除重复记录。
小贴士:distinct 只能出现在所有字段的最前面
查看有哪几种工作类型?
![](https://static001.geekbang.org/infoq/ff/ff718deb407c418279e5be81906c700a.png)
工作类型有几种?
![](https://static001.geekbang.org/infoq/0d/0d6f5cc71170d0cc9eb8dc3d85cddd28.png)
版权声明: 本文为 InfoQ 作者【打工人!】的原创文章。
原文链接:【http://xie.infoq.cn/article/09144b5b89b8c67775f4b2db4】。文章转载请联系作者。
评论