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

mysql:select max(score) не връща съответните данни за ред

Използвате MAX , което е агрегатна функция. Агрегираните функции имат ефект на третиране на множество редове в таблицата като група. Ако не направите нищо специално, всички редове в цялата таблица ще се използват като една голяма група и когато агрегатна функция като MAX ако има, всички тези редове ще бъдат кондензирани само в един обобщен ред. Този кондензиращ ефект би настъпил и за други агрегатни функции като MIN , SUM , GROUP_CONCAT и приятели (вижте:http://dev. mysql.com/doc/refman/5.1/en/group-by-functions.html ). Можете също да приложите специфични групирания с помощта на GROUP BY construct, но ако не го направите, появата на агрегатната функция просто ще обедини всички редове в един ред (но това групиране се случва след прилагане на WHERE условие, така че само филтрираните редове се обобщават)

Сега, поради този кондензиращ или „намаляващ“ ефект на агрегатните функции, има някакъв начин да се направи една стойност от много стойности. За MAX , този начин е да изброите само максималната стойност, намерена за всички екземпляри на израза, който сте предали като аргумент на MAX . Но другите ви колони нямат такава обобщена функция. За повечето продукти за бази данни, появата както на неагрегирани, така и на обобщени колони в SELECT списъкът би бил грешка. Но MySQL се държи погрешно/различно и връща само една от наличните стойности за всеки неагрегиран израз, посочен в SELECT малко. Коя стойност зависи от mysql - не можете да разчитате на конкретен алгоритъм.

В много случаи хората искат да направят нещо с "който и ред да има максимална стойност", с други думи, да намерят реда, който има като стойност максималната стойност, но използват другите колони от този ред неагрегирани. Решението, предоставено от middaparka, прави това и има и други начини да се постигне това (google за MySQL максимум по отношение на групата). За по-обща информация относно агрегатните функции и свързаните с тях GROUP BY клауза, можете да разгледате -shameless selfplug- статията ми тук:http://rpbouman.blogspot.com/2007/05/debunking-group-by-myths.html



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysqldump стартира от cron и сигурност с парола

  2. Премахнете напълно MySQL Ubuntu 14.04 LTS

  3. Производителност на MySQL – 5 параметъра от конфигурационния файл

  4. MySql инструкция за вмъкване в двоичен тип данни?

  5. Как да сравним низа на версията (x.y.z) в MySQL?