Heim >Datenbank >MySQL-Tutorial >Wie extrahiere ich die Top -N -Datensätze aus gruppierten Daten effizient?
Top-Datensätze in gruppierten Daten effizient extrahieren
Angenommen, es gibt einen strukturierten Datensatz mit Spalten wie Person, Gruppe und Alter. In diesem Artikel wird untersucht, wie man die Top-N-Personen in jeder Gruppe basierend auf dem Alter ermittelt.
Erwartete Ergebnisse:
Das Ziel besteht darin, die beiden ältesten Personen in jeder Gruppe zu finden, alphabetisch nach Namen sortiert, sofern sie gleich alt sind.
Bestehende Lösungen:
Der vorherige Ansatz (inspiriert von der von @Bohemian vorgeschlagenen Abfrage) ruft eine einzelne Zeile der obersten Ebene für jede Gruppe ab:
<code class="language-sql">select * from (select * from mytable order by `Group`, Age desc, Person) x group by `Group`</code>
Erweiterte Lösung mit UNION:
Eine Möglichkeit, diese Funktionalität zu erweitern, besteht darin, den UNION ALL-Operator zu verwenden und so eine bestimmte Anzahl von Datensätzen für jede Gruppe abzurufen:
<code class="language-sql">( select * from mytable where `group` = 1 order by age desc LIMIT 2 ) UNION ALL ( select * from mytable where `group` = 2 order by age desc LIMIT 2 )</code>
Eine Alternative zur Verwendung von Zeilennummern:
Ein anderer Ansatz besteht darin, für jeden Datensatz eine Zeilennummer zu generieren und dann basierend auf dieser Zeilennummer zu filtern:
<code class="language-sql">select person, `group`, age from ( select person, `group`, age, (@num:=if(@group = `group`, @num +1, if(@group := `group`, 1, 1))) row_number from test t CROSS JOIN (select @num:=0, @group:=null) c order by `Group`, Age desc, person ) as x where x.row_number <= 2;</code>
Fazit:
Je nach spezifischen Anforderungen und Dateneigenschaften bieten sowohl UNION- als auch Zeilennummerierungstechniken effektive Lösungen zum Abrufen von Datensätzen der obersten Ebene in gruppierten Ergebnissen.
Das obige ist der detaillierte Inhalt vonWie extrahiere ich die Top -N -Datensätze aus gruppierten Daten effizient?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!