4
SELECT column_name, aggregate_function(column_name) 
FROM table_name 
WHERE column_name operator value 
GROUP BY column_name 
HAVING aggregate_function(column_name) operator value

拥有和在哪里有什么区别

4

2 回答 2

8

where上的过滤器select ... from

having过滤来自的聚合结果group by ...

因此,再次查看您的示例:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value

在这里,WHERE column_name operator value说“返回 table_name 的结果,其中 'column_name operator value' 为真”。

只有在找到这些条件的所有结果后,它才会按 column_name 分组。

然后HAVING aggregate_function(column_name) operator value说“对于生成的聚合组,运行 'aggregate_function(column_name)' 并仅返回 'aggregate_function(column_name) operator value' 为真的结果。”

于 2011-09-12T06:08:43.177 回答
7
  1. WHERE 子句可以与 SELECT、INSERT、DELETE 等语句一起使用,但 HAVING 子句只能与 SELECT 语句一起使用。
  2. HAVING 子句只能与 GROUP BY 子句一起使用
  3. 在 WHERE 子句中,我们不能直接使用任何聚合函数
于 2011-09-12T06:09:02.513 回答