Heim > Datenbank > MySQL-Tutorial > Wie kann ich den Maximalwert in einer Spalte für jede Gruppe in einer großen Tabelle effizient finden?

Wie kann ich den Maximalwert in einer Spalte für jede Gruppe in einer großen Tabelle effizient finden?

Patricia Arquette
Freigeben: 2025-01-21 08:12:10
Original
457 Leute haben es durchsucht

How Can I Efficiently Find the Maximum Value in a Column for Each Group in a Large Table?

Finden Sie den Maximalwert in der gruppierten Spalte einer großen Tabelle

In diesem Beispiel müssen Sie die Zeile mit dem Maximalwert einer bestimmten Spalte aus jeder Gruppierung einer großen Tabelle extrahieren, ohne eine ineffiziente Suche in mehreren Tabellen durchzuführen. Betrachten Sie das folgende Formular:

<code>SCORES
ID    ROUND    SCORE
1     1        3
1     2        6
1     3        2
2     1        10
2     2        12
3     1        6</code>
Nach dem Login kopieren

Ihr Ziel ist es, die letzte Runde für jede eindeutige ID und die entsprechende Punktzahl abzurufen. Die gewünschte Ausgabe lautet wie folgt:

<code>ID   ROUND   SCORE
1    2       6
2    2       12
3    1       6</code>
Nach dem Login kopieren

Effiziente Lösung mit Fensterfunktionen

Eine effiziente Methode ist die Verwendung von Fensterfunktionen in Verbindung mit dem DISTINCT-Schlüsselwort:

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

Diese Abfrage verwendet die folgenden Schlüsselkonzepte:

  • PARTITION BY: Gruppiert Zeilen nach ID-Spalte.
  • MAX(round): Berechnen Sie die maximale Anzahl von Runden in jeder Partition.
  • FIRST_VALUE(score): Rufen Sie den ersten (letzten) Score für jede ID mit der maximalen Anzahl an Runden ab.
  • DISTINCT: Stellt sicher, dass nur eindeutige Zeilen zurückgegeben werden, wodurch doppelte Ergebnisse vermieden werden.

Diese optimierte Abfrage gibt effizient die letzte Runde und das letzte Ergebnis für jede eindeutige ID zurück, ohne dass die Tabelle mehrmals gescannt werden muss, und bleibt auch bei großen Tabellen effizient.

Das obige ist der detaillierte Inhalt vonWie kann ich den Maximalwert in einer Spalte für jede Gruppe in einer großen Tabelle effizient finden?. 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