Mysql
 sql >> база данни >  >> RDS >> Mysql

Вземете минимални и максимални стойности с една MySQL заявка с Group BY

Изглежда, че съхранявате числови стойности като низове. Наистина трябва да коригирате данните. Но можете да коригирате заявката. Според мен най-простият метод е имплицитно преобразуване:

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;

Имайте предвид, че pressure и condition не са във вашата GROUP BY , така че стойностите се избират от произволни редове. Това е наистина лоша практика и означава, че вашата заявка няма да работи в почти никоя друга база данни.

Можете да коригирате данните, като направите нещо като:

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

Подозирам, че бихте искали да направите същото за pressure също.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо MySQL дава грешка Не е позволено да върне набор от резултати от функция?

  2. Съхранение ден и месец (без година)

  3. MySQL заявката е по-бавна след създаване на индекс

  4. Списъкът с brew услуги показва, че mysql работи, но не може да се свърже

  5. Създаване на визуална база данни с MySQL Workbench