0

由于 mySQL 的语法,不允许使用此语句(在 WHERE 部分中不能使用计数元素):

Illegal syntax:
SELECT COUNT(x) AS amount ... WHERE amount > 0

但是如何通过 WHERE 处理 COUNTed 元素?

4

3 回答 3

3

编辑

请注意,您的原始查询可能不会按照您的想法进行。您可能想要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
于 2012-07-11T16:53:14.673 回答
2
SELECT COUNT(x) AS amount ... HAVING amount > 0
于 2012-07-11T16:53:02.083 回答
1

您需要HAVING用于此查询。它与 相同WHERE,但专门针对COUNT(x)

SQL

SELECT COUNT(x) AS amount ... HAVING amount > 0
于 2012-07-11T16:53:54.217 回答