sql >> Databasteknik >  >> RDS >> Mysql

Få Min- och Max-värden med en MySQL-fråga med Group BY

Du verkar lagra numeriska värden som strängar. Du borde verkligen fixa datan. Men du kan fixa frågan. Enligt min mening är den enklaste metoden 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;

Observera att pressure och condition är inte i din GROUP BY , så värden väljs från godtyckliga rader. Detta är en riktigt dålig praxis och betyder att din fråga inte skulle fungera i nästan vilken annan databas som helst.

Du kan fixa data genom att göra något som:

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

Jag misstänker att du skulle vilja göra detsamma för pressure likaså.




  1. TYP Definitionsändring i Oracle 21c

  2. Hur man skapar dynamiska pivottabeller i MySQL

  3. Hur ansluter man mysql till swift?

  4. Hur hittar man saknade datarader med SQL?