如果我有一个表有重复ID的表,我如何计算表中相同ID出现的次数,并且只显示计数大于1的记录?
我试过了:
SELECT COUNT(ID) AS myCount FROM myTbl
WHERE myCount > 1 GROUP BY ID
但是它说myCount
是无效的列名。有人能告诉我我做错了吗?
答案 0 :(得分:11)
您需要使用HAVING关键字:
SELECT COUNT(ID) AS myCount FROM myTbl
GROUP BY ID
HAVING COUNT(ID) > 1
来自MSDN:
指定组或聚合的搜索条件。可以 仅用于SELECT语句。 HAVING通常用于 GROUP BY子句。当不使用GROUP BY时,HAVING的行为类似于 WHERE子句。
答案 1 :(得分:0)
您需要了解l 逻辑查询处理阶段。 以下是主要查询子句 按您应键入的顺序指定(称为“键入顺序”):
逻辑查询处理顺序,即概念解释 顺序,是不同的。它从FROM子句开始。这是逻辑查询处理 六个主要查询子句的顺序:
一个不了解逻辑查询处理的人犯的典型错误是 在WHERE子句中引用SELECT子句中定义的列别名。您 无法执行此操作,因为WHERE子句在SELECT子句之前先求值。
如果您了解WHERE子句是在SELECT子句之前求值的,则您会意识到 该尝试是错误的,因为在此阶段,属性 myCount 尚不存在。
了解WHERE和HAVING之间的区别很重要。哪里 子句在对行进行分组之前进行评估,因此按行进行评估。
将行分组后将评估HAVING子句,因此将按组进行评估。 HAVING(按组评估):
另一方面,在哪里
因此您的查询应如下所示:
SELECT COUNT(ID) AS myCount FROM myTbl
GROUP BY ID
HAVING COUNT(ID) > 1
注意:请注意,ORDER BY子句是允许引用列的第一个也是唯一的子句 SELECT子句中定义的别名。那是因为ORDER BY子句是唯一的子句 在SELECT子句之后进行求值。