Bei Verwendung von MAX()
die GROUP BY
-Klausel teilt der Abfrage-Engine im Wesentlichen mit, wie die Elemente zu gruppieren sind, aus denen ein Maximum bestimmt werden soll. In Ihrem ersten Beispiel haben Sie nur eine einzelne Spalte ausgewählt, sodass keine Gruppierung erforderlich war. Aber in Ihrem zweiten Beispiel hatten Sie mehrere Spalten. Sie müssen also der Abfragemaschine mitteilen, wie sie bestimmen soll, welche verglichen werden, um ein Maximum zu finden.
Sie haben ihm gesagt, dass er nach der id
gruppieren soll Säule. Das bedeutet, dass Datensätze verglichen werden, die dieselbe id
haben und geben Ihnen das Maximum für jede eindeutige id
. Da jeder Datensatz eine andere id
hat , Sie haben mit dieser Klausel im Grunde nichts gemacht.
Es gruppiert alle Datensätze mit einer id
von 1
(was ein einzelner Datensatz war) und den Datensatz mit der maximalen id
zurückgegeben aus dieser Gruppe (das war dieser Rekord). Dasselbe geschah für 2
, 3
usw.
Im Falle der hier gezeigten drei Spalten wäre die einzige Stelle, an der es sinnvoll wäre, Ihre Datensätze zu gruppieren, die test_id
Säule. Etwa so:
SELECT MAX(id), title, test_id
FROM images
WHERE image IS NOT null
GROUP BY test_id
Dies würde sie nach test_id
gruppieren , sodass die Ergebnisse Datensätze 6 enthalten (die maximale id
für test_id
0), 4 (die maximale id
für test_id
1) und 8 (die maximale id
für test_id
2). Durch Aufteilen der Datensätze in diese drei Gruppen basierend auf den drei eindeutigen Werten in test_id
Spalte, kann es effektiv eine "maximale" id
finden innerhalb jeder Gruppe.