问题描述
|
我在此查询中有重复的“ 0”:
SELECT
DATE(dia.DTM) AS \'Dia\',COUNT(temp.TMP) AS \'Index\'
FROM dados_meteo dia
INNER JOIN dados_meteo temp
ON temp.DTM = dia.DTM
AND temp.TMP BETWEEN 20 AND 30
WHERE dia.POM = \'Alcobaca\'
GROUP BY DATE(dia.DTM)
解决方法
如果我理解正确(请准确描述您要查询执行的操作),则将
INNER JOIN
更改为LEFT JOIN
,您将获得所需的内容。
或以此:
SELECT
DATE(dia.DTM) AS \'Dia\',SUM(dia.TMP BETWEEN 20 AND 30) AS \'Index\'
FROM dados_meteo dia
WHERE dia.POM = \'Alcobaca\'
GROUP BY DATE(dia.DTM)
上面的查询实际在做什么是这样的:
SELECT
DATE(dia.DTM) AS \'Dia\',COUNT( CASE WHEN dia.TMP BETWEEN 20 AND 30
THEN \'yes\'
ELSE NULL
END )
AS \'Index\'
FROM dados_meteo dia
WHERE dia.POM = \'Alcobaca\'
GROUP BY DATE(dia.DTM)
评论后,这里稍作修改:
SELECT
DATE(dia.DTM) AS \'Dia\',CASE WHEN SUM(dia.TMP BETWEEN 20 AND 30) >= 24
THEN 20
ELSE -10
END AS \'Index\'
FROM dados_meteo dia
WHERE dia.POM = \'Alcobaca\'
GROUP BY DATE(dia.DTM)
, 我更新了查询,但我真的建议您使用单独的日历表:
select \"Dia\",\"Index\"
from
(select distinct date(dia.dtm) calendar_date
from dados_meteo) calendar left outer join
(select date(dtm) as \"Dia\",count(tmp) as \"Index\"
from dados_meteo
where pom = \'Alcobaca\' and tmp between 20 and 30
group by date(dtm)) temp on calendar.calendar_date = \"Dia\"