Mysql 为什么这个简单的计数查询不能使用这个别名&引用;“未找到列”;

Mysql 为什么这个简单的计数查询不能使用这个别名&引用;“未找到列”;,mysql,sql,mariadb,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

这可能是两个问题。使用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)。

您需要一个
具有
子句,而不是
WHERE
子句:

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

聚合后具有过滤器<代码>其中
在之前过滤。除此之外,
c
的值在聚合之前是未知的。(其他情况是,
WHERE
子句中不允许使用列别名。)

作为对Gordon答案的补充,如果您首先在单独的子查询中计算计数,则使用
WHERE
子句是合适的:

SELECT field1, cnt
FROM
(
    SELECT field1, COUNT(*) AS cnt
    FROM table1
    GROUP BY field1
) t
WHERE cnt > 1;
或者,您可以将
WHERE
逻辑移动到
HAVING
子句中,并避免子查询