我已经创建了以下查询来计算表中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
我如何根据他们的数量来区分我的结果?
答案 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
阅读简化图像:首先从源中获取数据,然后使用WHERE
进行过滤,然后使用GROUP BY
过滤,然后使用HAVING
过滤组结果,最后使用{{ {1}}。
您也可以这样思考,SELECT
会过滤您的行,但WHERE/HAVING
会限制列,例如:SELECT
会提供所有列,而SELECT * FROM tab
仅提供SELECT id FROM tab
之一。