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