MsSql

关注公众号 jb51net

关闭
首页 > 数据库 > MsSql > SQL Having 用法

SQL Having用法示例小结

作者:我名字很好听

这篇文章主要介绍了SQL Having用法示例小结,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧

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 用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文