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

Få Min- og Max-værdier med én MySQL-forespørgsel med Group BY

Det ser ud til, at du gemmer numerisk værdier som strenge. Du burde virkelig rette op på dataene. Men du kan rette forespørgslen. Efter min mening er den enkleste metode implicit konvertering:

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;

Bemærk at pressure og condition er ikke i din GROUP BY , så værdier vælges fra vilkårlige rækker. Dette er en rigtig dårlig praksis og betyder, at din forespørgsel ikke ville fungere i næsten enhver anden database.

Du kan rette op på dataene ved at gøre noget som:

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

Jeg formoder, at du gerne vil gøre det samme for pressure også.




  1. Hvordan indsætter jeg flere rækker korrekt i PG med node-postgres?

  2. VBA-kode for at tilføje sammenkædet tabel med primærnøgle

  3. Sådan rettes "Serveren er ikke konfigureret til DATAADGANG" i SQL Server

  4. Android:åbning og lukning af SQLite-database