2016-03-17 134 views
1

我想每个月来算耐心,我需要看到结果每个月数哪怕是0计数患者每月

,我运行应该给13上月查询其他月份的号码为30。但正在发生的事情是多少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 = 1year(date_app) = 2016应放在LEFT JOIN操作的ON子句中,否则LEFT JOIN成为INNER JOIN

Demo here

+0

没了,仍然只得到'病人:13 ||月:3' – androidnation

+0

@androidnation愚蠢的错误。我应该在'ON'中放置'WHERE'子句的谓词。检查我所做的编辑。 –

+0

完成。它正在工作。你能为我解释一下查询吗? – androidnation