2014-09-22 3 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; 

EDIT:

Я думаю, что вопрос изменился. Чтобы получить сообщение:

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

+0

@ dCoder. , , 'Count()' не должно было быть там. Он превратил запрос в запрос агрегации, который возвращает только одну строку. Это даже не было синтаксически правильным, потому что перед выражением не было запятой. –

+0

без агрегации он не вернет ожидаемый результат по моему вопросу. любое другое решение? – dCoder

Смежные вопросы