2013-03-25 29 views
1

当我的网站上的用户登录时,会为统计信息执行多个查询。快捷键多个Mysql SUMS在交织的日期范围内

SELECT SUM(earnings) FROM stats WHERE date BETWEEN $start_month AND $end_month 
SELECT SUM(earnings) FROM stats WHERE date BETWEEN $start_last_month AND $end_last_month 
SELECT SUM(earnings) FROM stats WHERE date BETWEEN $start_year AND NOW() 
//etc... 

我觉得我被要求它SUM所有这些对单独的查询“作弊” Mysql的引擎。例如,当它计算年收入时,它也在计算该月内的每月收入......但是,无论如何我都会再次查询它。

有没有更好的方法让多个日期范围交织的SUMS?

回答

3

其实您可以使用CASE来计算earning

SELECT SUM(CASE WHEN date BETWEEN $start_month AND $end_month THEN earnings ELSE 0 END), 
     SUM(CASE WHEN date BETWEEN $start_last_month AND $end_last_month THEN earnings ELSE 0 END), 
     SUM(CASE WHEN date BETWEEN $start_year AND NOW() THEN earnings ELSE 0 END) 
FROM stats 
+0

你能解释为什么这比单独的查询更好吗?谢谢:) – hellohellosharp 2013-03-25 05:43:49

+0

PHP和MySQL之间的往返次数减少;每次往返都会产生成本。 – TML 2013-03-25 05:44:18

+0

这是SQL标准还是mySQL特定的? – fredrik 2013-03-25 05:44:35