2014-12-06 111 views
1

我想在MySQL中執行一個查詢以獲得每年每月的值的總和。年的每個月的值的總和

目前,我有這樣的事情:

SELECT 
    e.rfc as RFC, 
    SUM(f.total) AS Total, 
    MONTH(f.fecha) as Mes 
FROM 
    foo f 
INNER JOIN 
    bar e 
     ON f.bar_id = e.id 
INNER JOIN 
    baz u 
     ON e.baz_id = u.id 
WHERE 
    u.id = 3 
    AND DATE(f.fecha) BETWEEN '2014-01-01' AND '2014-12-31' 
GROUP BY 
    MONTH(f.fecha) 

但在幾個月在那裏不存在foo的值沒有顯示。

我的結果ATM是這樣的:

RFC    Total   Mes 
AAA010101AAA 10556.000000 12 
AAA010101BBB 1856.000000  11 
AAA010101BBB 66262.896800 10 
AAA010101BBB 990.090000  9 
AAA010101BBB 73.000000  8 
AAA010101BBB 1304761.620000 7 

我需要的結果是:

RFC    Total   Mes 
AAA010101AAA 10556.000000 12 
AAA010101AAA 0.0    11 
... (When no data it's available just return 0.0 for the month) 
AAA010101AAA 0.0    1 
AAA010101BBB 0.0    12 
AAA010101BBB 1856.000000  11 
AAA010101BBB 66262.896800 10 
AAA010101BBB 990.090000  9 
AAA010101BBB 73.000000  8 
AAA010101BBB 1304761.620000 7 
AAA010101BBB 0.0    6 
... 
AAA010101BBB 0.0    1 

我要填寫的圖表,我需要一個零時,沒有富值可用來總結。

謝謝。

+0

嘗試,IFNULL(SUM(f.total),0)AS總計 – 2014-12-06 03:38:04

+0

@AlwaysSunny不會工作,我需要一些東西來產生12個月,然後總結只有有數據做SUM() – 2014-12-06 03:43:04

回答

1

假設你有一個在每個月的一些用戶對每個rfc數據,一個簡單的方法來解決這個問題是使用有條件聚集:

SELECT e.rfc as RFC, 
     SUM(CASE WHEN u.id = 3 THEN f.total ELSE 0 END) AS Total, 
     MONTH(f.fecha) as Mes 
FROM foo f INNER JOIN 
    bar e 
    ON f.bar_id = e.id INNER JOIN 
    baz u 
    ON e.baz_id = u.id 
WHERE DATE(f.fecha) BETWEEN '2014-01-01' AND '2014-12-31' 
GROUP BY MONTH(f.fecha) ; 

如果這不起作用,你已經開始與周圍碴left join併爲每個rfc生成12個月的行。

編輯:

這裏是更痛苦的版本:

select sum(total), m.m 
from (select distinct month(f.fecha) as m from foo where DATE(f.fecha) BETWEEN '2014-01-01' AND '2014-12-31') m left join 
    foo f 
    on month(f.fecha) = m.m left join 
    bar e 
    ON f.bar_id = e.id left join 
    baz u 
    ON e.baz_id = u.id and u.id = 3 
group by m.m 
order by m.m; 

我不知道是什麼rfc值在做什麼。它來自任意行,並不屬於查詢。

+0

你好@戈登,我並不總是有特定月份的用戶數據(查詢應該返回0.0) – 2014-12-06 03:40:11

+0

如果你有*任何*用戶的數據,而不僅僅是你正在尋找的用戶,這是有效的。用戶不需要過濾,因此只需要有關月份的信息。 – 2014-12-06 03:42:32

+0

我明白你的觀點。但是你的建議返回與原始查詢相同的結果。 – 2014-12-06 03:45:44

相關問題