2016-03-17 3 views
1

Я пытаюсь посчитать пациент в каждом месяце, и мне нужно, чтобы увидеть результат для каждого номера месяца, даже если он равен 0.пациентов графа за каждый месяц

Запроса, который я бег должен дать 13 на месяц номер 3 и 0 на других месяца. Но то, что происходит это число 13 разделяется и распространяется на все 12 месяцев, как в следующем:

enter image description here

А вот запрос:

SELECT 
    count(patients) as patients, month 

FROM 
(
    SELECT 
     count(app_id) as patients, 
     month(date_app) as month 
    FROM 
     dentist.appointment 
    WHERE id_logged=1 AND year(date_app)='2016' 
    GROUP BY month(date_app) 

    UNION SELECT 0,1 
    UNION SELECT 0,2 
    UNION SELECT 0,3 
    UNION SELECT 0,4 
    UNION SELECT 0,5 
    UNION SELECT 0,6 
    UNION SELECT 0,7 
    UNION SELECT 0,8 
    UNION SELECT 0,9 
    UNION SELECT 0,10 
    UNION SELECT 0,11 
    UNION SELECT 0,12 
) tmp 
GROUP BY month 

ответ

1

Попробуйте этот запрос:

SELECT 
    count(app_id) as patients, 
    t.m as month 
FROM ( 
    SELECT 1 AS m UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION 
    SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION 
    SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12) AS t 
LEFT JOIN dentist.appointment ON t.m = month(date_app) AND 
      id_logged = 1 AND year(date_app) = 2016 
GROUP BY t.m 

Трюк сначала создает таблицу в строке, содержащую все 12-месячные числа, , затемLEFT JOIN ваш исходный стол в таблицу.

Примечание: Предикаты id_logged = 1 и year(date_app) = 2016 должны быть помещены в предложении о LEFT JOIN операции ON, в противном случае LEFT JOIN становится INNER JOIN.

Demo here

+0

нет, все еще получают только «пациентов: 13 || месяц: 3' – androidnation

+0

@androidnation Глупая ошибка. Я должен был бы помещать предикаты в предложение 'WHERE' в' ON'. Проверьте внесенное изменение. –

+0

Готово. Он работает сейчас. Вы можете объяснить мне запрос? – androidnation

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