我想逻辑地理解为什么我们在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
答案 0 :(得分:4)
原因是SQL会在评估HAVING子句之前对记录进行分组。
主要是SQL语法,但它直观有意义,正如Jeroen所指出的那样:
HAVING适用于您的分组结果,所以在此特定情况下, 不寻常的情况,SQL遵循查询的时间顺序 步骤。