Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie ruft man die obersten N-Maximalwerte aus einer MySQL-Tabelle ab, gruppiert nach einer bestimmten Spalte?

Linda Hamilton
Freigeben: 2024-11-10 05:33:02
Original
193 Leute haben es durchsucht

How do you retrieve the top N maximum values from a MySQL table, grouped by a specific column?

Abrufen der Top-N-Maximalwerte aus einer MySQL-Tabelle

Eine häufige Aufgabe bei der Datenanalyse besteht darin, die Top-n-Maximalwerte für eine bestimmte Spalte auszuwählen von einem Tisch. Betrachten Sie die folgende Tabelle:

column1 column2
1 foo
2 foo
3 foo
4 foo
5 bar
6 bar
7 bar
8 bar

Problemstellung:

Für einen gegebenen Wert von n rufen Sie die obersten n Maximalwerte für Spalte1 ab, gruppiert nach Spalte2. Im obigen Beispiel wäre für n=2 die gewünschte Ausgabe:

column1
3
4
7
8

Lösung:

Während ein einfacher Ansatz darin bestehen könnte, die Zeilen nach Spalte2 zu gruppieren Wenn Sie den Maximalwert für jede Gruppe auswählen, wird nur der absolute Maximalwert für jede Gruppe zurückgegeben. Um die Top-n-Werte abzurufen, ist ein fortgeschrittenerer Ansatz erforderlich.

UNION-basierter Ansatz:

Ein Ansatz besteht darin, eine UNION-Klausel zu verwenden, um mehrere Abfragen zu kombinieren Wählen Sie den Maximalwert für eine andere Gruppe. Für n=2 würde die folgende Abfrage ausreichen:

SELECT max(column1) m
FROM table t
GROUP BY column2
UNION
SELECT max(column1) m
FROM table t
WHERE column1 NOT IN (SELECT max(column1) WHERE column2 = t.column2)
Nach dem Login kopieren

Rangbasierter Ansatz:

Für flexiblere n-Werte kann ein rangbasierter Ansatz verwendet werden beschäftigt. Dabei wird jeder Zeile basierend auf dem Wert von Spalte 1 ein Rang zugewiesen und anschließend die Zeilen mit den ersten n Rängen ausgewählt. Die folgende Abfrage implementiert diesen Ansatz:

SELECT t.*
FROM
   (SELECT grouper,
          (SELECT val
           FROM table li
           WHERE li.grouper = dlo.grouper
           ORDER BY li.grouper, li.val DESC
           LIMIT 2,1) AS mid
   FROM 
      (SELECT DISTINCT grouper
      FROM table
      ) dlo 
   ) lo, table t
WHERE t.grouper = lo.grouper
      AND t.val > lo.mid
Nach dem Login kopieren

Ersetzen Sie „grouper“ durch den Namen der Gruppierungsspalte und „val“ durch die Spalte, die die Werte enthält.

Die Unterabfrage innerhalb der Die LIMIT-Klausel definiert den n-ten Rangwert für jede Gruppe. Anschließend werden Zeilen mit Werten ausgewählt, die größer als dieser n-te Rangwert sind.

Schlussfolgerung:

Beide Ansätze bieten effektive Methoden zur Auswahl der obersten n Maximalwerte jeweils aus einer Tabelle mit seinen eigenen Stärken und Grenzen. Der gewerkschaftsbasierte Ansatz ist unkompliziert und robust, während der rangbasierte Ansatz Flexibilität bei der Angabe der Anzahl der abzurufenden Maximalwerte bietet.

Das obige ist der detaillierte Inhalt vonWie ruft man die obersten N-Maximalwerte aus einer MySQL-Tabelle ab, gruppiert nach einer bestimmten Spalte?. 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