当前位置: 代码网 > it编程>数据库>MsSqlserver > SQL Having用法示例小结

SQL Having用法示例小结

2024年12月17日 MsSqlserver 我要评论
sql having用法having子句用于过滤分组之后的数据。1、如果过滤条件中使用了聚合函数,或行已经被分组,则必须使用having来替换where。否则,报错。2、having 必须声明在 gr

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com