Heim > Datenbank > MySQL-Tutorial > Wie wähle ich die Zeile mit dem Maximalwert aus jeder Gruppe in MySQL aus?

Wie wähle ich die Zeile mit dem Maximalwert aus jeder Gruppe in MySQL aus?

Susan Sarandon
Freigeben: 2024-12-05 01:44:08
Original
851 Leute haben es durchsucht

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

Gruppieren und Abrufen von Zeilen basierend auf dem Maximalwert in MySQL

Bei der Datenbankverwaltung kann das Abrufen bestimmter Zeilen aus einer Gruppe für die Datenanalyse von entscheidender Bedeutung sein und Berichterstattung. In MySQL spielen Gruppierungs- und Sortiervorgänge in dieser Hinsicht eine entscheidende Rolle. Eine häufige Herausforderung entsteht jedoch, wenn versucht wird, die Zeile mit dem höchsten Wert aus einer Gruppe auszuwählen, nachdem eine Gruppierung nach Operation angewendet wurde.

Stellen Sie sich ein Szenario vor, in dem Sie eine Tabelle mit Zeilen haben, die mehrere identifizierte Datenversionen darstellen durch eine ID- und eine Versions-ID-Spalte. Das Ziel besteht darin, die Zeile mit der höchsten version_id für jede eindeutige ID abzurufen.

Während der intuitive Ansatz der Verwendung von „group by“ mit einer „order by“-Klausel nicht das gewünschte Ergebnis liefert, bietet MySQL mehrere effiziente Lösungen für diese Abfrage :

Max-basierte Gruppierung:

SELECT *
FROM (SELECT id, MAX(version_id) AS max_version_id FROM table GROUP BY id) AS subquery
JOIN table ON subquery.id = table.id AND subquery.max_version_id = table.version_id;
Nach dem Login kopieren

Diese Abfrage nutzt eine Unterabfrage, um das Maximum zu berechnen version_id für jede ID-Gruppe. Die Hauptabfrage führt dann einen Inner Join durch, um die entsprechenden Zeilen aus der Originaltabelle abzurufen.

Korrelierte Unterabfrage:

SELECT t1.*
FROM table AS t1
WHERE t1.version_id = (SELECT MAX(version_id) FROM table WHERE id = t1.id);
Nach dem Login kopieren

Dieser Ansatz verwendet eine korrelierte Unterabfrage zum Vergleich die version_id jeder Zeile mit dem Maximalwert innerhalb ihrer ID-Gruppe. Die Hauptabfrage wählt nur die Zeilen aus, die die Bedingung erfüllen.

Fensterfunktion:

SELECT id, MAX(version_id) OVER (PARTITION BY id) AS max_version_id, field1, field2
FROM table
ORDER BY id;
Nach dem Login kopieren

Fensterfunktionen bieten einen alternativen Ansatz, indem sie die maximale version_id innerhalb jeder ID berechnen Partition. Die OVER-Klausel gibt die Partitionierungskriterien an und die ORDER BY-Klausel stellt sicher, dass die Zeilen innerhalb jeder Partition geordnet sind.

Diese Lösungen bieten effiziente Möglichkeiten, die Zeilen mit der höchsten version_id für jede eindeutige ID abzurufen. Durch das Verständnis der Nuancen von Gruppierungs- und Sortiervorgängen können Datenbankbenutzer ihre Abfragen verfeinern, um aus komplexen Datenstrukturen aussagekräftige Daten zu extrahieren.

Das obige ist der detaillierte Inhalt vonWie wähle ich die Zeile mit dem Maximalwert aus jeder Gruppe in MySQL 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