Heim >Datenbank >MySQL-Tutorial >Wie kann ich den höchsten Wert einer nach ID gruppierten Spalte in SQL effizient abrufen?

Wie kann ich den höchsten Wert einer nach ID gruppierten Spalte in SQL effizient abrufen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-21 08:09:39979Durchsuche

How to Efficiently Retrieve the Highest Value of a Column Grouped by ID in SQL?

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!

Stellungnahme:
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