2011-06-16 29 views
1

我有這樣的MySQL查詢:MySQL的SUM(),按月分組,以「0」月不出現

SELECT YEAR(date), MONTHNAME(date), SUM(block_time) 
FROM flights 
WHERE operator = 'PSD' 
GROUP BY YEAR(date), MONTH(date) 

我遇到的問題是,如果一個月有零小時它不出現在結果中。爲了查看所有月份是否需要改變,我是否需要改變當月是否有空。

+0

我叫shenanigans。這可能是說月份與WHERE條款不符? – 2011-06-16 22:27:27

+0

@pst - 我認爲這一點 - 對於'WHERE'子句,當月沒有任何航班,但月份(&年)仍應包含在結果集中,爲0小時。 – 2011-06-16 22:28:50

+0

我想,你可以有一個月的表並加入它。我不確定這是不是一個好主意。 – marnir 2011-06-16 22:31:22

回答

1

您需要包括所有的年/月你想在你的結果的表格,並需要如下加入吧......

SELECT myMonths.theYear, myMonths.theMonth, COALESCE(theData.hours, 0) 
FROM myMonths 
LEFT JOIN (
    SELECT YEAR(date) AS theYear, MONTHNAME(date) AS theMonth, SUM(block_time) AS hours 
    FROM flights 
    WHERE operator = 'PSD' 
    GROUP BY YEAR(date), MONTHNAME(date) 
) theData 
ON myMonths.theYear = theData.theYear 
AND myMonths.theMonth = theData.theMonth 
+0

謝謝,我會放棄這一點。我會讓你知道它是怎麼回事。 – Lazy8 2011-06-16 22:56:58

+0

嗯,這絕對可能是我的錯誤,但現在我現在回到所有月份的'0.0'。嘿,至少我在本月有'0'。 :)現在我只需要讓塊時間回到其他幾個月!我會繼續擺弄它。 – Lazy8 2011-06-16 23:23:25

+0

@LazyB - 你只需要確保你的'myMonths'表格包含與原始查詢返回格式相同的年份和月份。 – 2011-06-16 23:25:05

0

嘗試聯合與那些沒有時間

SELECT YEAR(date), MONTHNAME(date), SUM(block_time) 
FROM flights 
WHERE operator = 'PSD' 
GROUP BY YEAR(date), MONTH(date) 

UNION ALL 

SELECT YEAR(date), MONTHNAME(date), SUM(block_time) 
FROM flights 
WHERE hours = 0 
GROUP BY YEAR(date), MONTH(date)