Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie wähle ich in MySQL die Zeile mit dem höchsten Wert in jeder Gruppe aus?

Linda Hamilton
Freigeben: 2024-11-24 08:02:11
Original
593 Leute haben es durchsucht

How to Select the Row with the Highest Value in Each Group in MySQL?

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)
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage