SQL:每月计数表中的NULL替换为0

时间:2019-01-20 15:56:12

标签: mysql group-by null

我有一个名为GAINLP的表 该表包含字段

'Record#"           (INT), 
'SightingDate'      (DATE), 
'SpeciesName'       (VARCHAR)

需要SQL输出包含一个整数的数组,该整数对应于每个月SightingDate的总和。

示例:0,0,0,0,1,5,10,12,5,3,0,0

相反,以下代码导致跳过空值总和,而我剩下1,5,10,12,5,3

`select count(SightingDate) from GAINLP where SpeciesName LIKE '%Actias luna' GROUP BY MONTH(SightingDate)`

我知道可以通过与日历表连接来完成此操作,但是我还没有找到同样使用WHERE运算符的此类代码示例。

2 个答案:

答案 0 :(得分:0)

您似乎正在寻找条件聚合。原理是将过滤逻辑移至聚合函数中的CASE构造。

SELECT 
    SUM(
        CASE
            WHEN SpeciesName LIKE '%Actias luna'
                THEN 1 
            ELSE 0
        END
    )
GROM gainlp 
GROUP BY MONTH(SightingDate)

答案 1 :(得分:0)

可以在此处使用条件聚合:

SELECT
    MONTH(SightingDate) AS month,
    COUNT(CASE WHEN SpeciesName LIKE '%Actias luna' THEN 1 END) cnt
FROM GAINLP
GROUP BY
    MONTH(SightingDate);

但是,这可能不如基于日历表的联接方法有效。这是您可能的方法:

SELECT
    t1.month,
    COUNT(t2.SightingDate) cnt
FROM (SELECT DISTINCT MONTH(SightingDate) AS month FROM GAINLP) t1
LEFT JOIN GAINLP t2
    ON t1.month = MONTH(t2.SightingDate)
WHERE
    t2.SpeciesName LIKE '%Actias luna'
GROUP BY
    t1.month;

注意:您的数据可能跨越一个给定的年份,在这种情况下,您可能希望同时报告年份和月份。