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

mysql:select max(score) returnerer ikke de relevante rækkedata

Du bruger MAX , som er en aggregeret funktion. Aggregerede funktioner har den effekt, at de behandler flere rækker i tabellen som en gruppe. Hvis du ikke gør noget særligt, vil alle rækker i hele tabellen blive brugt som én stor gruppe, og når en aggregeringsfunktion som MAX er der, vil alle disse rækker blive kondenseret til kun én samlet række. Den kondenserende effekt ville også være opstået for andre aggregerede funktioner såsom MIN , SUM , GROUP_CONCAT og venner (se:http://dev. mysql.com/doc/refman/5.1/en/group-by-functions.html ). Du kan også anvende specifikke grupperinger ved at bruge GROUP BY konstruktion, men hvis du ikke gør det, vil forekomsten af ​​aggregatfunktionen bare samle alle rækker i én række (men denne samling sker efter anvendelse af WHERE betingelse, så kun de filtrerede rækker aggregeres)

Nu, på grund af denne kondenserende eller 'reducerende' effekt af aggregerede funktioner, er der en måde at lave én værdi ud af mange værdier på. For MAX , den måde er kun at angive den maksimale værdi, der findes for alle forekomster af det udtryk, du sendte som argument til MAX . Men dine andre kolonner har ikke sådan en aggregeret funktion. For de fleste databaseprodukter er forekomsten af ​​både uaggregerede såvel som aggregerede kolonner i SELECT listen ville være en fejl. Men MySQL opfører sig forkert/anderledes og returnerer kun én af de tilgængelige værdier for hvert ikke-aggregeret udtryk, der er angivet i SELECT lidt. Hvilken værdi er op til mysql - du kan ikke stole på nogen bestemt algoritme.

I mange tilfælde vil folk gøre noget med "uanset hvilken række der har den maksimale værdi", med andre ord, find den række, der har den maksimale værdi som værdi, men brug de andre kolonner fra den række uaggregeret. Det gør løsningen fra middaparka, og det er der også andre måder at opnå på (google for MySQL gruppemæssigt maksimum). For mere generel information om aggregerede funktioner og de relaterede GROUP BY klausul, du kunne tage et kig på -skamløs selfplug- min artikel her:http://rpbouman.blogspot.com/2007/05/debunking-group-by-myths.html



  1. Bedste personsøgningsløsning ved hjælp af SQL Server 2005?

  2. SQL-valgvindue omkring en bestemt række

  3. Guide til design af database til meddelelser i MySQL

  4. 7 måder at returnere alle tabeller med udenlandske nøgler i SQL Server