2011-11-18 49 views
3

我想在一个查询中执行两个不同的SUM。MySQL:是否可以使用单个查询来完成此操作?

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 

什么是一个单一的查询实现这一目标的最佳途径中积累?

非常感谢。

回答

5

只要使用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 
+0

,完美的工作,谢谢! – gjb

1
 
select 
    user, 
    sum(points) as points_total, 
    sum(
     case 
      when date_achieved >= current_date - interval 1 month then points 
      else 0 
     end 
    ) as points_month 
from myTable 
group by user 
+0

谢谢你的回答。 – gjb

相关问题