Auswählen der obersten Maximalwerte aus einer Tabelle
Bei der Datenbankverwaltung kann es erforderlich sein, die obersten n Werte aus einer Tabelle abzurufen. Um dies zu erreichen, stehen mehrere Ansätze zur Verfügung. Betrachten Sie die folgende Tabelle:
column1 column2 1 foo 2 foo 3 foo 4 foo 5 bar 6 bar 7 bar 8 bar
Für n=2 möchten wir diese Ergebnisse erhalten:
3 4 7 8
Approximation mit Group Max
Ein erster Ansatz besteht darin, für jede Gruppe den Maximalwert zu berechnen:
SELECT max(column1) FROM table GROUP BY column2
Diese Methode liefert jedoch nur den Spitzenwert für jede Gruppe, nicht die obersten n Werte.
Gewerkschaftsbasierte Lösung
Für n=2 kann die folgende gewerkschaftsbasierte Abfrage verwendet werden:
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)
Diese Abfrage wählt die obersten Werte aus und schließt dann Duplikate aus, indem sie sich der zweiten Abfrage anschließt, die den nächsthöheren Wert findet, der noch nicht vorhanden ist ausgewählt.
Rangsimulation
Für jeden Wert von n besteht ein allgemeinerer Ansatz darin, die rank()-Funktion über Partitionen zu simulieren. Eine Möglichkeit, dies zu tun, ist:
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
Diese Abfrage gruppiert die Werte nach der gewünschten Spalte und findet dann den nächsthöheren Wert für jede Gruppe innerhalb des angegebenen Grenzwerts (in diesem Fall 2,1 für n=). 2)
Das obige ist der detaillierte Inhalt vonWie rufe ich die Top-n-Max-Werte aus einer Datenbanktabelle ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!