我有以下捐赠信息表:
+-------------+------------+--------+
| 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/