2014-09-22 53 views
0

我有以下數據值作爲表中的示例。如果數據不存在,則使用Mysql查詢來計數記錄

TId Date  MID 
1  2014-02-01 5 
2  2014-03-15 6 
3  2014-02-26 5 
4  2014-05-03 5 
5  2014-04-19 6 

現在我想按月和MID顯示記錄組,如果數據不存在於特定的MID月份。我試着使用UNION顯示失蹤幾個月,但沒有得到預期的效果如下面...

MID  Month count 
5  1  0 
5  2  2 
5  3  0 
5  4  0 
5  5  1 
6  1  0 
6  2  0 
6  3  1 
6  4  1 
6  5  0  

這裏是我的查詢那麼遠,希望有人能幫助獲得上述結果。

​​

回答

0

你似乎想要幾個月和MID不存在的對。爲此,生成所有組合,然後使用left join來匹配它們。不匹配的行是要回報的:

SELECT m.MID, months.month 
FROM (SELECT 1 as month UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL 
     SELECT 5 UNION ALL SELECT 6 
    ) Months CROSS JOIN 
    (SELECT distinct MID from my_table) m LEFT JOIN 
    my_table mt 
    ON month(mt.date) = months.month and mt.mid = m.mid 
WHERE mt.mid is null; 

編輯:

我覺得這個問題改變。要得到計數:

SELECT m.MID, months.month, count(mt.mid) as cnt 
FROM (SELECT 1 as month UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL 
     SELECT 5 UNION ALL SELECT 6 
    ) Months CROSS JOIN 
    (SELECT distinct MID from my_table) m LEFT JOIN 
    my_table mt 
    ON month(mt.date) = months.month and mt.mid = m.mid 
GROUP m.MID, months.month; 
+0

它沒有工作。它只返回一條記錄。 – dCoder 2014-09-22 11:48:03

+0

@dCoder。 。 。 'count()'不應該在那裏。它將查詢轉換爲聚合查詢,該查詢僅返回一行。它甚至在語法上都不正確,因爲表達式之前沒有逗號。 – 2014-09-22 19:07:02

+0

沒有聚合它不會根據我的問題返回預期的結果。其他解決方案? – dCoder 2014-09-24 07:53:33

相關問題