由于 mySQL 的语法,不允许使用此语句(在 WHERE 部分中不能使用计数元素):
Illegal syntax:
SELECT COUNT(x) AS amount ... WHERE amount > 0
但是如何通过 WHERE 处理 COUNTed 元素?
请注意,您的原始查询可能不会按照您的想法进行。您可能想要WHERE x > 0
:
SELECT COUNT(x) AS amount ... WHERE x > 0
这是因为HAVING amount > 0
如果有任何大于 0 的 x 值基本上是没有意义的。MySQL 将自动分组并包含所有行,并计算每一行。看起来您想知道 x 中数量为非零的行数,因此您需要使用 WHERE 指定只有那些行应该与要计算的原始条件匹配。有关需要具有HAVING的聚合函数的示例,请参见下文。
你用HAVING
. 语法与 完全相同WHERE
,但在聚合之后进行评估。
SELECT COUNT(x) AS amount ... HAVING amount > 0
区别很重要,因为它允许您限制使用 WHERE 计算哪些行,然后限制使用 HAVING 返回的行。
例如,假设我想知道每个部门在销售额低于 10 美元时赚了多少钱,但前提是它的销售额超过 1000 美元:
SELECT
SUM(amount) as total_sales
...
WHERE amount < 10.0
GROUP BY department
HAVING total_sales > 1000.0
SELECT COUNT(x) AS amount ... HAVING amount > 0