sql >> Databáze >  >> RDS >> Mysql

Získejte minimální a maximální hodnoty pomocí jednoho dotazu MySQL pomocí Group BY

Zdá se, že ukládáte numerické hodnoty jako řetězce. Opravdu byste měli opravit data. Dotaz však můžete opravit. Podle mého názoru je nejjednodušší metodou implicitní konverze:

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;

Všimněte si, že pressure a condition nejsou ve vaší GROUP BY , takže hodnoty jsou vybírány z libovolných řádků. Toto je opravdu špatný postup a znamená to, že váš dotaz nebude fungovat v téměř žádné jiné databázi.

Data můžete opravit takto:

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

Mám podezření, že byste chtěli udělat totéž pro pressure také.




  1. MySQL vrátí první řádek spojené tabulky

  2. Funkce NLS_INITCAP() v Oracle

  3. Vložení SQLite

  4. jak používat (useUnicode=yes characterEncoding=UTF-8 ) s DBCP