MySQL: Steuern, welche Zeile in einer Group BY-Abfrage zurückgegeben wird
In MySQL ist das Abrufen der Zeile mit dem höchsten Wert aus jeder Gruppe eine gemeinsame Aufgabe. Die Verwendung der Standard-GROUP BY-Klausel mit ORDER BY kann jedoch manchmal zu unerwarteten Ergebnissen führen.
Um dies zu erreichen, können wir alternative Ansätze verwenden, die das Standardgruppierungsverhalten überschreiben:
Unterabfrage Methode:
Diese Methode beinhaltet das Erstellen einer Unterabfrage, um die maximale Versions-ID für jedes einzelne Exemplar zu erhalten id:
SELECT * FROM (SELECT id, MAX(version_id) AS version_id FROM table GROUP BY id) t1 INNER JOIN table t2 ON (t2.id = t1.id AND t1.version_id = t2.version_id)
Diese Abfrage verknüpft die Originaltabelle mit einer Unterabfrage, die die maximale version_id für jede ID auswählt. Der Join stellt sicher, dass nur die Zeilen mit der höchsten Versions-ID zurückgegeben werden.
Unterabfrage mit ORDER BY-Trick:
Eine Variante der Unterabfragemethode beinhaltet die Verwendung von ORDER BY im Unterabfrage, um eine bestimmte Reihenfolge sicherzustellen:
SELECT * FROM (SELECT * FROM table ORDER BY version_id DESC) t1 GROUP BY t1.id
Diese Abfrage sortiert die Zeilen effektiv in absteigender Reihenfolge der Versions-ID innerhalb jeder Gruppe Bevor Sie die Gruppierung durchführen, stellen Sie sicher, dass die Zeile mit der höchsten version_id für jede Gruppe beibehalten wird.
Benannte Windows-Funktion:
Fensterfunktionen ermöglichen die Durchführung von Berechnungen innerhalb eines Satz von durch ein Fenster definierten Zeilen, die für diese Aufgabe verwendet werden können:
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY version_id DESC) AS rn FROM table ) t WHERE rn = 1
Diese Abfrage berechnet die Zeilennummer für jede eindeutige ID innerhalb der Partition definiert durch ROW_NUMBER. Die WHERE-Klausel filtert Zeilen mit anderen Zeilennummern als 1 heraus und stellt so sicher, dass nur die Zeile mit der höchsten version_id für jede ID zurückgegeben wird.
Das obige ist der detaillierte Inhalt vonWie wähle ich in MySQL die Zeile mit dem höchsten Wert in jeder Gruppe aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!