Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Obtenha valores Min e Max com uma consulta MySQL com Group BY


Parece que você está armazenando numérico valores como strings. Você realmente deve corrigir os dados. Mas, você pode corrigir a consulta. Na minha opinião, o método mais simples é a conversão implícita:
SELECT MIN(`temp_min` + 0) AS `temp_min`,
       MAX(`temp_max` + 0) AS `temp_max`,
       `dt_txt`, DAYNAME(`dt_txt`) AS `dayname`,
       `pressure`, `condition`, `dt_txt`
FROM infoboard.forecasts
WHERE `dt_txt` >= CURDATE()
GROUP BY `dt_txt`
ORDER BY `dt_txt` ASC;

Observe que pressure e condition não estão em seu GROUP BY , então os valores são escolhidos de linhas arbitrárias. Esta é uma prática muito ruim e significa que sua consulta não funcionaria em quase nenhum outro banco de dados.

Você pode corrigir os dados fazendo algo como:
alter table infoboard.forecasts
    modify column temp_min decimal(6, 3),
    modify column temp_max decimal(6, 3);

Suspeito que você queira fazer o mesmo para pressure também.