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



我有一个名为 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 运算符的此类代码示例。

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

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;

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

您似乎正在寻找条件聚合。原理是将筛选逻辑移动到聚合函数中的 CASE 构造。

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

相关内容

  • 没有找到相关文章

最新更新