MySQL SELECT与WHERE子句不包括金额为'0'的结果

时间:2013-02-23 07:59:11

标签: mysql sql select where

我正在尝试创建一个select存储过程来返回值的计数不同实例。但是,如果不存在不同的实例,则应返回0.以下查询几乎完成了我需要的所有内容

SELECT br.barangay,COUNT(DISTINCT cr.cr_patient_no) as `amount`
FROM barangay as br LEFT JOIN case_report_main as cr  on cr.cr_barangay = br.barangay
GROUP BY br.barangay 
ORDER BY br.barangay  ASC

此代码返回列' barangay'其中包含地点名称和'计数'柱。但是,我还需要能够使用WHERE子句搜索它们。

WHERE cr.cr_date_onset BETWEEN '2010-01-01' AND '2014-12-12'

我需要一个包含0量的结果,如下所示:

'NAME1'|'1'
'NAME2'|'0'
'NAME3'|'4'
'NAME4'|'0'

但是当我添加WHERE子句时,它会删除金额为0的所有结果。

'NAME1'|'1'
'NAME3'|'4'

有人可以为此提供解决方案吗?

3 个答案:

答案 0 :(得分:3)

您需要在ON子句上添加该条件,而不是WHERE子句

SELECT  br.barangay,
        COUNT(DISTINCT cr.cr_patient_no) AS `amount`
FROM    barangay AS br
        LEFT JOIN case_report_main AS cr
            ON  cr.cr_barangay = br.barangay AND
                cr.cr_date_onset BETWEEN '2010-01-01' AND '2014-12-12'
GROUP   BY br.barangay
ORDER   BY br.barangay ASC

答案 1 :(得分:3)

将它放在你的WHERE子句中:

cr.cr_date_onset IS NULL OR cr.cr_date_onset BETWEEN '2010-01-01' AND '2014-12-12'

答案 2 :(得分:0)

尝试此查询:

    SELECT br.barangay,ifnull(COUNT(DISTINCT cr.cr_patient_no),0) as `amount`
    FROM barangay as br LEFT JOIN case_report_main as cr  on cr.cr_barangay = br.barangay 
    where cr.cr_date_onset between '2010-01-01' and '2014-12-12'
    GROUP BY br.barangay 
    ORDER BY br.barangay  ASC