如何更正INNER JOIN中的“重复”计数?

时间:2011-06-11 16:49:57

标签: mysql

我在此查询中有一个重复的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)

2 个答案:

答案 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"