MySQL:如何根据 WHERE 子句的结果计算 ORDER BY 子句的 SUM

标签 mysql sql

我有以下捐赠信息表:

+-------------+------------+--------+
| supporterID | date       | amount |
+-------------+------------+--------+
| 1           | 2018-01-01 | 100    |
| 2           | 2018-01-07 | 10     |
| 3           | 2018-01-09 | 5000   |
| 1           | 2018-02-01 | 100    |
| 2           | 2018-02-03 | 10     |
| 1           | 2018-02-10 | 100    |
| 2           | 2018-03-14 | 10     |
| 3           | 2018-03-18 | 5      |
+-------------+------------+--------+

我需要根据自 2 月 1 日以来的捐款总额来选择支持者,然后按 total 排序。值(value)。忽略 2 月 1 日之前的所有捐款。

我的非执行查询是:

SELECT supporterID, sum(amount) AS total
FROM donations
WHERE date >= 2018-02-01
GROUP BY supporter_id
ORDER BY total desc
LIMIT 10

问题是 sum(amount)是根据所有捐款计算的,而不仅仅是自 2 月 1 日以来的捐款。 supporterID 3被作为最高结果返回,因为他们在一月份捐赠了 5000 美元。

结果应该是:

+-------------+-------+
| supporterID | total |
+-------------+-------+
| 1           | 200   |
| 2           | 20    |
| 3           | 5     |
+-------------+-------+

我怎样才能实现这个目标?

最佳答案

根据 Vamsi's comment ,问题是我缺少引号,而不是查询本身。

这是工作查询:

SELECT supporterID, sum(amount) AS total
FROM donations
WHERE date >= '2018-02-01'
GROUP BY supporter_id
ORDER BY total desc
LIMIT 10

关于MySQL:如何根据 WHERE 子句的结果计算 ORDER BY 子句的 SUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49412676/

相关文章:

java - jOOQ - 支持 JSR310

sql - 在选择不同行时按一个字段中的最小值进行分组

mysql - 按日期顺序对评论排序的问题

php - 横式学生证的制作方法

javascript - 从 restify 获取正确的 json 输出

mysql - 在 MySQL 中,我可以复制一行插入到同一个表中吗?

mysql - 使用原始 SQL 查询从数据库中获取满足我需求的所有记录

c# - 应用程序中的服务器错误 '/demo'

sql - 如何修改这个特定的查询?

php - 当检测到多用户通过ip登录时插入随机id