我有一个名为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运算符的此类代码示例。
答案 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;
注意:您的数据可能跨越一个给定的年份,在这种情况下,您可能希望同时报告年份和月份。