我正在尝试创建一个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'
有人可以为此提供解决方案吗?
答案 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