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 BY
和 HAVING
子句,如下所示:
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 by
和having
:
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 子句
Sum() 使用 IIF() 或 MS Access 中的 Where 子句
Laravel Query Builder SUM 与 where 子句
不能在 Group by/Order by/Where/ON 子句中使用 Group 或 Aggregate 函数(min()、max()、sum()、count()、...等)