SQL Having用法
HAVING子句用于过滤分组之后的数据。
1、如果过滤条件中使用了聚合函数,或行已经被分组,则必须使用HAVING来替换WHERE。否则,报错。
2、HAVING 必须声明在 GROUP BY 的后面。- # 查询各个部门中最高工资大于10000的部门信息
- SELECT department_id, MAX(salary) max_salary
- FROM employees
- GROUP BY department_id
- # 对分组后的数据进行筛选,选出部门中最高工资大于10000的部门
- HAVING max_salary > 10000;
复制代码 开发中,我们使用HAVING的前提是SQL中使用了GROUP BY。
如果没有使用GROUP BY,使用HAVING,则整个表中的所有记录会被当成一组,然后对这一组记录根据HAVING中的条件进行筛选。- SELECT department_id, MAX(salary) max_salary
- FROM employees
- HAVING max_salary > 10000;
复制代码 HAVING 不能单独使用,必须要跟 GROUP BY 一起使用。
1、当过滤条件中有聚合函数时,则此过滤条件必须声明在HAVING中。
2、当过滤条件中没有聚合函数时,则此过滤条件声明在WHERE中或HAVING中都可以。但是,建议大家声明在WHERE中。
补充:SQL Having用法
拿个业务场景说这个案例,比如我们有个表里面可能有批改过的数据,批改过得数据不会随着新批改的数据覆盖,而是逐条插入表中,如果想找出包含最早批改的数据和最新批改数据的话,那么我们就需要用到了havinng 用法,假设最开始的批单号是000,批单号是累加的
比如我们有个表 table 表里面有两个字段 订单号(order_no) 和 批单号(endorseq_no)
那么写法就是- select order_no
- from table
- group by order_no
- having sum(case when endorseq_no = '000' then 1
- else 0 end) >= 1 --这个是判断必须包含最初的批单
- and count(*) >= 2 --这个是判断除了最初的批单之外还需要有新批改的批单
复制代码 到此这篇关于SQL Having用法的文章就介绍到这了,更多相关SQL Having 用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源:https://www.jb51.net/database/332434ye6.htm
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|