SQL Server中的having(对分组后的信息过滤)

https://blog.csdn.net/tswc_byy/article/details/81909822

 

 

二、having的用法
1.解释:having子句是用来对分组之后的信息进行过滤,因此使用having时通常都会先使用group by。

select deptno,avg(sal) from emp group by deptno having avg(sal)>1700
--查找不同deptno的平均sal,输出平均sal大于1700的

 

 


2.如果没有使用group by但使用了having,则意味着对整体信息进行过滤,例:

select count(*) from emp having avg(sal)>1700

 

 


3.having子句出现的字段必须的是分组之后的组的整体信息,having子句不允许出现组内的详细信息

4. 尽管select字段中可以出现别名,但是having子句中不能出现字段的别名,只能使用字段最原始的名字!例:

select deptno,avg(sal) "平均sal" from emp group by deptno having avg(sal)>1700
--查找不同deptno的平均sal,输出平均sal大于1700的

 

 

select deptno,avg(sal) "平均sal" from emp group by deptno having "平均sal">1700 --error

 

 


5. having和where的异同:

相同:
都是对数据过滤,只保留有效的数据;
where和having一样, 都不允许出现字段的别名;
只允许出现最原始的字段的名字。

不同:
where是对原始的记录过滤having是对分组之后的记录过滤;
where必须的写在having的前面,顺序不可颠倒否则运行出错。

posted @   yinghualeihenmei  阅读(1240)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示