2013-03-25 28 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