Heim > Datenbank > MySQL-Tutorial > Wie wähle ich nur Zeilen mit dem Maximalwert in einer Spalte mit SQL aus?

Wie wähle ich nur Zeilen mit dem Maximalwert in einer Spalte mit SQL aus?

Linda Hamilton
Freigeben: 2025-01-25 20:57:11
Original
217 Leute haben es durchsucht

How to Select Only Rows with the Maximum Value in a Column Using SQL?

SQL-Auswahlzeilen mit maximalem Wert in Spalte: Vollständige Anleitung

Problembeschreibung:

Betrachten Sie die folgende Tabelle mit Dokumentinformationen:

id rev content
1 1 ...
2 1 ...
1 2 ...
1 3 ...

Das Ziel besteht darin, eine Zeile pro ID abzurufen, die nur das Dokument mit der größten Revisionsnummer (rev) enthält. Die erwartete Ausgabe für die angegebenen Daten ist:

id rev content
1 3 ...
2 1 ...

Dieses Problem tritt normalerweise in SQL auf, wo der Benutzer aufgefordert wird, die Datenzeile mit dem Maximalwert in der Spalte für eine bestimmte Gruppenkennung zu finden.

Lösung 1: Unterabfrageverbindung verwenden

Die erste Methode besteht darin, eine Unterabfrage zu erstellen, die die Gruppenkennung (id) und den Maximalwert in der Spalte „rev“ identifiziert. Diese Unterabfrage kann mithilfe einer Gleichheitsbedingung für die Gruppenkennung und den Maximalwert mit der Haupttabelle verknüpft werden.

<code class="language-sql">SELECT a.id, a.rev, a.contents
FROM YourTable a
INNER JOIN (
    SELECT id, MAX(rev) rev
    FROM YourTable
    GROUP BY id
) b ON a.id = b.id AND a.rev = b.rev</code>
Nach dem Login kopieren

Lösung 2: Links mit sich selbst verbinden

Die zweite Methode verwendet eine Left-Join-Operation, um die Tabelle mit sich selbst zu verknüpfen. Geben Sie Gleichheitsbedingungen für Gruppenkennungen (id) an. Um sicherzustellen, dass nur die Zeile mit dem größten Drehzahlwert ausgewählt wird, fügen Sie eine Bedingung hinzu, die prüft, ob der rechte Drehzahlwert kleiner als der linke Drehzahlwert ist. Wenden Sie abschließend einen Filter an, um nur Zeilen mit einem rechten Rev-Wert von NULL anzuzeigen (was anzeigt, dass ein maximaler Rev-Wert vorhanden ist).

<code class="language-sql">SELECT a.*
FROM YourTable a
LEFT OUTER JOIN YourTable b
    ON a.id = b.id AND a.rev < b.rev
WHERE b.id IS NULL;</code>
Nach dem Login kopieren

Fazit:

Beide Lösungen liefern die gleichen Ergebnisse und sind SQL ANSI-kompatibel. Die am besten geeignete Wahl hängt von den persönlichen Vorlieben und den spezifischen Leistungsmerkmalen der Datenbank ab. Um den besten Ansatz für verschiedene Szenarien zu ermitteln, wird Benchmarking empfohlen.

Das obige ist der detaillierte Inhalt vonWie wähle ich nur Zeilen mit dem Maximalwert in einer Spalte mit SQL 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