mysql - 如何让它工作 "SELECT COUNT(x) AS amount ... WHERE amount > 0"?

标签 mysql sql count

由于 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

这是因为如果存在任何大于 0 的 x 值,HAVING amount > 0 本质上是没有意义的。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

关于mysql - 如何让它工作 "SELECT COUNT(x) AS amount ... WHERE amount > 0"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11437546/

相关文章:

javascript - Node.js MySQL 查询中的 Try/Catch 是冗余的吗?

mysql - 按取决于当前时间的条件进行排序的正确方法是什么?

MYSQL - 计算是否以逗号分隔的项目

MYSQL排名问题

mysql - 连接两个表并获取一个表的计数,但所有结果都与另一个表上的 ID 匹配

mysql - 我可以让三个数据库的三个mySQL三个字段一起交互吗?

MySQL根据字段值加入不同的表

php - 搜索MySQL数据库表,按SUM对结果排序

mysql - 计算表列中的单词出现次数

.net - DotNET 应用程序中的 GDI 句柄