不能参考列计数的事件

时间:2015-09-09 11:34:16

标签: sql-server

我已经创建了以下查询来计算表中ID的重复次数。

select count(Hazaa) as Countie from Shazoo
group by Hazaa

意识到他们中的大多数都等于1(就像他们应该的那样),我添加条件只显示有缺陷的条件。但是,SQL Server在语法上不同意我的看法。

select count(Hazaa) as Countie from Shazoo
where Countie > 1
group by Hazaa

我如何根据他们的数量来区分我的结果?

1 个答案:

答案 0 :(得分:7)

要过滤GROUP BY的结果,您需要使用HAVING

SELECT Hazaa, COUNT(Hazaa) AS Countie
FROM Shazoo
GROUP BY Hazaa
HAVING COUNT(Hazaa) > 1

或将其包装在子查询/ CTE中并使用WHERE过滤:

;WITH cte AS (
   SELECT Hazaa, COUNT(Hazaa) AS Countie
   FROM Shazoo
   GROUP BY Hazaa
)
SELECT *
FROM cte
WHERE Countie > 1;

请参阅simplified order of execution

enter image description here

阅读简化图像:首先从源中获取数据,然后使用WHERE进行过滤,然后使用GROUP BY过滤,然后使用HAVING过滤组结果,最后使用{{ {1}}。

您也可以这样思考,SELECT会过滤您的行,但WHERE/HAVING会限制列,例如:SELECT会提供所有列,而SELECT * FROM tab仅提供SELECT id FROM tab之一。

Logical query processing