2013-12-02 4 views
1

Я пытался исправить мой запрос в течение нескольких дней в настоящее время :( Предполагается, группировать по месяцам и возвращает 0, если запись не найдена Пример:.Группа по месяцам и возвращает 0, если данные не найдены

SELECT MONTH(created_at) AS month_num, 
DATE_FORMAT(created_at, '%b') AS month_name, COUNT(*) AS total_num 
    FROM table WHERE user_id=1384249399168 
    GROUP BY MONTH(created_at) ORDER BY created_at DESC 

Результат:

month_num  month_name  total_num 
    8   Aug     20 
    7   Jul     15 
    5   May     39 
    2   Feb     10 
    1   Jan     8 

Espected Результат:

month_num  month_name  total_num 
     12   Dec     0 
     11   Nov     0 
     10   Oct     0 
     9   Sep     0 
     8   Aug     20 
     7   Jul     15 
     6   Jun     0 
     5   May     39 
     4   Apr     0 
     3   Mar     0 
     2   Feb     10 
     1   Jan     8 

I ч ave попробовал много ответов, особенно это MySql count() to return 0 if no records found, но безуспешно.

Любая помощь пожалуйста?

ответ

1

Это сообщение решить мою проблему. Мне пришлось создать таблицу, содержащую все 12 месяцев.

mysql select the count of records for every month Спасибо кто особенно @Turdaliev

+0

Вы также можете использовать UNION - или даже таблицу полезности целых чисел (0-9) - или (еще лучшая идея) обрабатывают логику недостающих месяцев на уровне приложения (например, с небольшим количеством php) – Strawberry

2

Я не проверял, но он должен работать:

SELECT MONTH(created_at) AS month_num, 
DATE_FORMAT(created_at, '%b') AS month_name, ifnull(count(*),0) AS total_num 
    FROM table WHERE user_id=1384249399168 
    GROUP BY MONTH(created_at) ORDER BY created_at DESC 
+0

Вы знаете, есть функция для этого. Это называется COALESCE. – Strawberry

+0

@ Турдалиев Жаль, что это не сработало. Я возвращаю тот же результат без 0 месяцев, у которых нет данных. Спасибо за быстрый ответ – Lomse

+0

Извините, отредактированный пробовать новый –

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