我试图了解 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
吗?
我试图了解 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
吗?
WHERE 子句在分组过程发生之前执行,并且只能访问输入表中的字段。HAVING 在分组过程发生后执行,可以根据分组过程中计算的聚合值的值过滤结果。
即使使用了 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 或以下的商店。]