Mysql
 sql >> Database >  >> RDS >> Mysql

Ottieni valori Min e Max con una query MySQL con Group BY

Sembra che tu stia memorizzando numerico valori come stringhe. Dovresti davvero correggere i dati. Ma puoi correggere la query. Secondo me, il metodo più semplice è la conversione implicita:

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;

Nota che pressure e condition non sono nel tuo GROUP BY , quindi i valori vengono scelti da righe arbitrarie. Questa è una pratica davvero pessima e significa che la tua query non funzionerebbe in quasi tutti gli altri database.

Puoi correggere i dati facendo qualcosa come:

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

Sospetto che tu voglia fare lo stesso per pressure anche.