2012-08-07 141 views
5

我需要在mysql中創建一個查詢,它將返回12個行(每個月有一行),用於選擇月份名稱和給定月份的記錄數。我有兩個表,一個months_tbl和events_tbl。 events_tbl中的每條記錄都有一個日期時間列和一個company_id列。mysql選擇每個月的記錄數

我目前正在做這樣的事情(注意我沒有WHERE子句COMPANY_ID尚):

SELECT months_tbl.month, COUNT(events_tbl.event_id) cnt 
FROM months_tbl 
LEFT JOIN events_tbl ON months_tbl.month_id = MONTH(events_tbl.appt_date_time) 
GROUP BY months_tbl.month 
ORDER BY months_tbl.month_id ASC; 

這將返回類似選擇什麼,我期待(12行,用計數月活動,或零,如果什麼都沒有):

**month** **cnt** 
January  0 
February  0 
March  0 
April  0 
May   0 
June   0 
July   0 
August  88 
September 99 
October  120 
November  0 
December  9 

但是它返回所有記錄,而不管公司。我需要確保查詢被這樣過濾,我加了where子句:

SELECT months_tbl.month, COUNT(events_tbl.appt_id) cnt 
FROM months_tbl 
LEFT JOIN events_tbl ON months_tbl.month_id = MONTH(events_tbl.appt_date_time) 
WHERE events_tbl.company_id = 1 
GROUP BY months_tbl.month 
ORDER BY months_tbl.month_id ASC; 

當我添加的where子句我的結果變成:

**month** **cnt** 
August  88 
September 99 
October  120 
December  9 

任何想法,爲什麼我失去了所有其他月份記錄何時添加where子句,即使我正在使用左連接?

+0

我的解決方案能幫助你嗎? – arnoudhgz 2012-08-07 12:07:20

回答

6

您使用的是LEFT JOIN,但在你的WHERE語句您使其成爲一個 '正常' JOIN

嘗試這樣寫的:

SELECT months_tbl.month, COUNT(events_tbl.appt_id) cnt 
FROM months_tbl 
    LEFT JOIN events_tbl ON (months_tbl.month_id = MONTH(events_tbl.appt_date_time) 
    AND events_tbl.company_id = 1 
) 
GROUP BY months_tbl.month 
ORDER BY months_tbl.month_id ASC; 

注意AND events_tbl.company_id = 1LEFT JOIN