mysql SUM() 在 WHERE 子句中

Posted

技术标签:

【中文标题】mysql SUM() 在 WHERE 子句中【英文标题】:mysql SUM() in a WHERE clause 【发布时间】:2015-11-03 06:19:42 【问题描述】:

我的积分表数据如下:

+----+---------+--------+
| id | user_id | points |
+----+---------+--------+
|  1 |     1   |   10   |
|  2 |     3   |    5   |
|  3 |     1   |   12   |
|  4 |     2   |   27   |
|  5 |     1   |   14   |
+----+---------+--------+

我需要上面数据中的用户 ID 那些点总和大于 10

喜欢

+--------+
| userid |
+--------+
|   1    |
|   2    |
+--------+

【问题讨论】:

【参考方案1】:

您不能在查询中使用WHERE,因为您正在尝试对用户聚合进行操作。相反,使用 GROUP BYHAVING 子句,如下所示:

SELECT t.user_id FROM
table t
GROUP BY t.user_id
HAVING SUM(t.points) > 10

这是一个 SQL Fiddle,您可以在其中测试此查询。

【讨论】:

【参考方案2】:

试试这个查询

select user_id from tablename
group by user_id
having sum(points)>10

【讨论】:

【参考方案3】:

你需要使用group byhaving

select user_id
from TableName
group by user_id
having sum(points)>10

示例结果:

user_id
-------
1
2

SQL Fiddle 中的示例结果

【讨论】:

【参考方案4】:

您不能在where 子句中使用聚合表达式。但是,您可以使用 having 子句。它的作用类似于 where 子句,因为它用于过滤结果,但它应用在 group by 子句之后,因此它也可以作用于聚合表达式:

SELECT   user_id
FROM     points
GROUP BY user_id
HAVING   SUM(points) > 10

【讨论】:

【参考方案5】:

你必须使用having 子句:

select userid
from `table`
group by user_id
having sum(points) > 10

【讨论】:

【参考方案6】:

试试这个查询:

select user_id 
from [your_table] 
group by user_id 
having sum(points)>10

【讨论】:

以上是关于mysql SUM() 在 WHERE 子句中的主要内容,如果未能解决你的问题,请参考以下文章

Oracle [过程] - Sum 函数忽略 WHERE 子句

在 where 子句中使用计算列

Sum() 使用 IIF() 或 MS Access 中的 Where 子句

Laravel Query Builder SUM 与 where 子句

不能在 Group by/Order by/Where/ON 子句中使用 Group 或 Aggregate 函数(min()、max()、sum()、count()、...等)

为啥包含 group by、sum 或 where 子句时这条 SQL 语句会挂起?