我正在尝试在单个查询中执行两个不同的 SUM。
user points date_achieved
-----------------------------
Foo 10 2000-01-01
Foo 20 2011-11-18
Bar 10 2000-01-01
Bar 20 2011-11-15
Bar 30 2011-11-18
1)总分
SELECT user, SUM(points) AS points_total
FROM myTable
GROUP BY user
2) 过去一个月内累积的积分
SELECT user, SUM(points) AS points_month
FROM myTable
WHERE date_achieved >= CURRENT_DATE - INTERVAL 1 MONTH
GROUP BY user
使用单个查询实现此目的的最佳方法是什么?
非常感谢。
最佳答案
只需使用 case 语句,仅在满足您的条件时才计分。
SELECT
user,
SUM(points) AS points,
SUM(case
when date_achieved >= (CURRENT_DATE - INTERVAL 1 MONTH)
THEN points
else 0 END) points_last_Month
FROM myTable
GROUP BY user
关于MySQL:是否可以通过单个查询来做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8189731/