我试图理解HAVING和WHERE之间的区别。我知道HAVING
与GROUP BY语句一起使用。但是,我无法理解为什么接受以下声明:
select SUM(child_id) from children WHERE child_ID = 5 GROUP BY Child_ID
正确的陈述不应该是select SUM(child_id) from children GROUP BY Child_ID HAVING child_ID = 5
吗?
答案 0 :(得分:6)
WHERE子句在分组过程发生之前执行,并且只能访问输入表中的字段。 HAVING在分组过程发生后执行,并可以根据分组过程中计算的聚合值的值过滤结果。
答案 1 :(得分:2)
即使正在使用HAVING,也可以使用WHERE子句。它们意味着非常不同的东西考虑它的方法如下:
所以,如果我有一个表:(STORE_ID,STATE_CODE,SALES)
Select STATE, SUM(SALES)
from MyTable
Where SALES > 100
Group By STATE
Having Sum(Sales) > 1000
这将首先过滤以仅读取销售额超过100的商店记录。对于每个组(按州),它将仅销售销售额为100或更多的商店的销售额。然后,除非国家级别的总和超过1000,否则它将撤销任何国家。[注:州的总和不包括任何100或更少的销售商店。]