MySQL:用一个查询可以做到这一点吗?

gjb*_*gjb 3 mysql sql

我试图在一个查询中执行两个不同的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
Run Code Online (Sandbox Code Playgroud)

1)总积分

SELECT user, SUM(points) AS points_total
FROM myTable
GROUP BY user
Run Code Online (Sandbox Code Playgroud)

2)过去一个月内积累的积分

SELECT user, SUM(points) AS points_month
FROM myTable
WHERE date_achieved >= CURRENT_DATE - INTERVAL 1 MONTH
GROUP BY user
Run Code Online (Sandbox Code Playgroud)

使用单个查询实现此目的的最佳方法是什么?

非常感谢.

Con*_*rix 5

只需使用案例陈述即可在符合条件时计算点数.

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
Run Code Online (Sandbox Code Playgroud)