Heim > Datenbank > MySQL-Tutorial > Wie rufe ich die Top-n-Max-Werte aus einer Datenbanktabelle ab?

Wie rufe ich die Top-n-Max-Werte aus einer Datenbanktabelle ab?

Barbara Streisand
Freigeben: 2024-11-10 10:59:02
Original
698 Leute haben es durchsucht

How to Retrieve the Top n Max Values from a Database Table?

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

Für n=2 möchten wir diese Ergebnisse erhalten:

3    
4    
7    
8    
Nach dem Login kopieren

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

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

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

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!

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