1

値の個別のインスタンスの数を返すために、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

このコードは、場所の名前と「カウント」列を含む「バランガイ」列を返します。ただし、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'

誰かがこれに対する解決策を提供できますか?

4

3 に答える 3

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
于 2013-02-23T08:08:41.300 に答える
3

これをWHERE句に入れてください:

cr.cr_date_onset IS NULL OR cr.cr_date_onset BETWEEN '2010-01-01' AND '2014-12-12'
于 2013-02-23T08:12:10.617 に答える
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
于 2013-02-23T08:08:30.633 に答える