为什么HAVING子句需要在GROUP-BY之后?

时间:2014-11-19 16:51:37

标签: sql mariadb

我想逻辑地理解为什么我们在GROUP-BY之后需要一个HAVING子句?

SELECT name
FROM actor
WHERE id IN (

   SELECT Actorid
   FROM casting
   WHERE ord = 1

GROUP BY actorid
HAVING COUNT(*) > 29

)
ORDER BY name asc

它还没有点击给我,为什么以下不正确:

HAVING COUNT(*) > 29
GROUP BY actorid

1 个答案:

答案 0 :(得分:4)

原因是SQL会在评估HAVING子句之前对记录进行分组。

主要是SQL语法,但它直观有意义,正如Jeroen所指出的那样:

  

HAVING适用于您的分组结果,所以在此特定情况下,   不寻常的情况,SQL遵循查询的时间顺序   步骤。

10 Tips for Sorting SQL - TechRepublic