我在此查询中有一个重复的COUNT
:
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)
答案 0 :(得分:2)
如果我理解正确(请尽快描述您希望查询执行的操作),您可以通过将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)
答案 1 :(得分:0)
我更新了查询但我真的建议有一个单独的日历表:
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"