Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Bitte erläutern Sie die Funktionalität von select max(...) ... group by in sql

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.