Heim > Datenbank > MySQL-Tutorial > Wie extrahiere ich die Top -N -Datensätze aus gruppierten Daten effizient?

Wie extrahiere ich die Top -N -Datensätze aus gruppierten Daten effizient?

Barbara Streisand
Freigeben: 2025-01-25 10:05:09
Original
264 Leute haben es durchsucht

How to Efficiently Extract the Top N Records from Grouped Data?

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

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

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

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!

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