SQL-Abfrage zum Suchen des maximalen Spaltenwerts gruppiert nach ID
Dieser Artikel befasst sich mit dem Problem des effizienten Abrufens des höchsten Werts aus einer Spalte, gruppiert nach einer eindeutigen ID innerhalb einer Datenbanktabelle. Lassen Sie uns dies anhand der Tabelle „SCORES“ veranschaulichen:
<code>ID ROUND SCORE 1 1 3 1 2 6 1 3 2 2 1 10 2 2 12 3 1 6</code>
Unser Ziel ist es, die Zeile zu erhalten, die den maximalen „ROUND“-Wert für jede „ID“ enthält, zusammen mit dem entsprechenden „SCORE“. Die gewünschte Ausgabe ist:
<code>ID ROUND SCORE 1 3 2 2 2 12 3 1 6</code>
Ein Unterabfrage-Ansatz ist zwar möglich, kann jedoch bei großen Datensätzen ineffizient sein. Eine überlegene Methode nutzt Fensterfunktionen:
<code class="language-sql">SELECT DISTINCT id ,max(round) OVER (PARTITION BY id) AS round ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score FROM SCORES WHERE id IN (1,2,3) ORDER BY id;</code>
Diese Abfrage nutzt max(round) OVER (PARTITION BY id)
, um den maximalen „ROUND“ für jede „ID“ zu bestimmen. first_value(score) OVER (PARTITION BY id ORDER BY round DESC)
ruft dann den „SCORE“ ab, der dieser maximalen „RUNDE“ zugeordnet ist. DISTINCT
stellt sicher, dass nur eine Zeile pro „ID“ zurückgegeben wird.
Dieser Fensterfunktionsansatz vermeidet mehrere Tabellenscans und bietet eine deutlich effizientere Lösung für große Datenbanken.
Das obige ist der detaillierte Inhalt vonWie kann ich den höchsten Wert einer nach ID gruppierten Spalte in SQL effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!