为什么这个简单的COUNT查询不能与此别名一起使用? “未找到列”

时间:2019-07-17 14:55:16

标签: mysql sql mariadb

这可能是两个问题。使用mysql / mariadb。 我正在尝试查找某个字段的重复项。

SELECT field1, COUNT(*) c FROM table1 WHERE c > 1 GROUP BY field1;

Error Code: 1054. Unknown column 'c' in 'where clause'

如果我将别名放在引号中,它可以工作,但找不到重复项:

SELECT field1, COUNT(*) 'c' FROM table1 WHERE 'c' > 1 GROUP BY field1;

为了澄清起见,如果我不使用WHERE子句,它的确会找到重复项(> 1)。

2 个答案:

答案 0 :(得分:1)

您需要一个having子句,而不是where子句:

SELECT field1, COUNT(*) as c
FROM table1
GROUP BY field1
HAVING c > 1 ;

HAVING过滤 聚合。 WHERE之前的过滤器。除了所有其他事项,c的值在聚合之前未知。 (其他情况是WHERE子句中根本不允许使用列别名。)

答案 1 :(得分:0)

作为对戈登答案的补充,如果您首先在单独的子查询中计算计数,那么WHERE子句 是适当的:

SELECT field1, cnt
FROM
(
    SELECT field1, COUNT(*) AS cnt
    FROM table1
    GROUP BY field1
) t
WHERE cnt > 1;

或者,您可以将WHERE逻辑移到HAVING子句中,避免使用子查询。