使用having
子句和where
子句有什么区别。任何人都可以详细解释。
答案 0 :(得分:2)
HAVING过滤器分组元素, WHERE过滤未分组的元素。
示例1:
SELECT col1, col2 FROM table
WHERE col1 = @id
示例2:
SELECT SUM(col1), col2 FROM table
GROUP BY col2
HAVING SUM(col1) > 10
因为HAVING条件只能在分组发生后的第二个例子中应用,所以不能将其重写为WHERE子句。
示例3:
SELECT SUM(col1), col2 FROM table
WHERE col1 = @id
GROUP BY col2
HAVING SUM(col1) > 10
演示了如何同时使用WHERE和HAVING:
表格数据首先按col1 = @id
过滤
然后将过滤后的数据分组
然后,SUM(col1) > 10
答案 1 :(得分:1)
WHERE filters rows before they are grouped in GROUP BY clause
while HAVING filters the aggregate values after GROUP BY takes place
答案 2 :(得分:1)
HAVING
指定搜索SELECT
语句中使用的内容。
换句话说。
HAVING
适用于群组。
WHERE
适用于行。
答案 3 :(得分:1)
没有GROUP BY,没有区别(但HAVING看起来很奇怪)
使用GROUP BY
HAVING
用于测试聚合上的条件(MAX,SUM,COUNT等)HAVING column = 1
与WHERE column = 1
相同(column
上没有聚合)WHERE COUNT(*) = 1
是不允许的。HAVING COUNT(*) = 1
答案 4 :(得分:0)
具有聚合函数,例如
SELECT *
FROM foo
GROUP BY baz
HAVING COUNT(*) > 8
答案 5 :(得分:0)
Having
适用于Sum
等聚合。 Where
适用于所有其他情况。
答案 6 :(得分:0)
它们指定组或聚合的搜索条件。但不同之处在于HAVING只能与SELECT语句一起使用。 HAVING通常用于GROUP BY子句。不使用GROUP BY时,HAVING的行为类似于WHERE子句。 Clause基本上只用于查询中的GROUP BY函数,而WHERE子句在它们是查询中GROUP BY函数的一部分之前应用于每一行。
答案 7 :(得分:0)
正如其他已经说过的那样,已经和group by一起使用了。原因是执行顺序 - 在分组之前执行,在执行之后执行
答案 8 :(得分:0)
将其视为过滤发生的位置。
当您指定where
子句时,您将输入行过滤到您的聚合函数(即:我只想获得居住在特定城市的人的平均年龄。)当您指定having
时约束,您指定只需要平均值的某个子集。 (我只希望看到平均年龄为70岁或以上的城市。)