在SQL SELECT语句中,HAVING和WHERE的区别是什么?
编辑:我已经把Steven的答案标记为正确答案,因为它包含了链接上的关键信息:
当GROUP BY没有被使用时,HAVING就像一个WHERE子句
我在WHERE中看到的情况没有GROUP BY,这就是我的困惑开始的地方。当然,在你知道这一点之前,你不能在问题中指定它。
在SQL SELECT语句中,HAVING和WHERE的区别是什么?
编辑:我已经把Steven的答案标记为正确答案,因为它包含了链接上的关键信息:
当GROUP BY没有被使用时,HAVING就像一个WHERE子句
我在WHERE中看到的情况没有GROUP BY,这就是我的困惑开始的地方。当然,在你知道这一点之前,你不能在问题中指定它。
当前回答
从这里。
SQL标准要求HAVING 中的列必须只引用 中使用的GROUP BY子句或列 聚合函数
而不是应用于数据库行的WHERE子句
其他回答
HAVING在使用聚合(例如GROUP BY)时使用。
SELECT edc_country, COUNT(*)
FROM Ed_Centers
GROUP BY edc_country
HAVING COUNT(*) > 1
ORDER BY edc_country;
当GROUP BY不使用时,WHERE和HAVING子句本质上是等价的。
然而,当使用GROUP BY时:
WHERE子句用于从结果中筛选记录。的 在进行任何分组之前进行筛选。 HAVING子句用于从一个组(即到 执行分组聚合后检查条件)。
来自这里的资源
两者之间的区别在于与GROUP BY子句的关系:
WHERE在GROUP BY之前;SQL在对记录进行分组之前计算WHERE子句。 HAVING继GROUP BY之后;SQL在对记录进行分组后计算HAVING。
参考文献
SQLite SELECT语句语法/铁路图 Informix SELECT语句语法/铁路图
HAVING:用于检查聚合发生后的条件。 WHERE:用于检查聚合前的条件。
这段代码:
select City, CNT=Count(1)
From Address
Where State = 'MA'
Group By City
给你一个表的所有城市在MA和地址在每个城市的数量。
这段代码:
select City, CNT=Count(1)
From Address
Where State = 'MA'
Group By City
Having Count(1)>5
给你一个在MA有超过5个地址的城市的表格,以及每个城市的地址数量。
WHERE子句不适用于聚合函数 意思是:你不应该这样使用 附赠:表名
SELECT name
FROM bonus
GROUP BY name
WHERE sum(salary) > 200
不要用WHERE从句,而要用HAVING..
如果不使用GROUP BY子句,HAVING子句就相当于WHERE子句
SELECT name
FROM bonus
GROUP BY name
HAVING sum(salary) > 200