sql >> Base de Datos >  >> RDS >> Mysql

Obtenga valores mínimos y máximos con una consulta MySQL con Group BY

Parece que estás almacenando numeric valores como cadenas. Realmente deberías arreglar los datos. Pero, puedes arreglar la consulta. En mi opinión, el método más simple es la conversión 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;

Tenga en cuenta que la pressure y condition no están en tu GROUP BY , por lo que los valores se eligen de filas arbitrarias. Esta es una práctica realmente mala y significa que su consulta no funcionará en casi ninguna otra base de datos.

Puede corregir los datos haciendo algo como:

alter table infoboard.forecasts
    modify column temp_min decimal(6, 3),
    modify column temp_max decimal(6, 3);

Sospecho que querrías hacer lo mismo con la pressure también.