Heim > Datenbank > MySQL-Tutorial > Wie erhalte ich die Top-N-Elemente für jede Gruppe mithilfe der GROUP BY-Klausel von SQL?

Wie erhalte ich die Top-N-Elemente für jede Gruppe mithilfe der GROUP BY-Klausel von SQL?

Barbara Streisand
Freigeben: 2024-12-19 07:24:13
Original
869 Leute haben es durchsucht

How to Get the Top N Items for Each Group Using SQL's GROUP BY Clause?

Top-N-Elemente für jede Gruppe mit SQL Group By

In einer Datenbank wird die GROUP BY-Klausel verwendet, um Zeilen in einer Tabelle zu gruppieren basierend auf gemeinsamen Werten in einer oder mehreren Spalten. In Kombination mit Aggregatfunktionen wie SUM() kann es zur Berechnung von Statistiken für jede Gruppe verwendet werden. In einigen Fällen kann es jedoch erforderlich sein, die Top-N-Artikel innerhalb jeder Gruppe zu extrahieren.

Ein Ansatz zur Lösung dieses Problems besteht darin, eine Unterabfrage zu verwenden, um den Gesamtumsatz für jeden Artikel in jedem Geschäft zu berechnen und dann eine Rangfolge festzulegen sie in jedem Geschäft. Dies kann mit der Funktion ROW_NUMBER() erreicht werden, um eine Rangfolge für jede Zeile zu generieren, aufgeteilt nach Filialen:

;WITH s AS 
(
  SELECT StoreID, UPCCode, tds, rn = ROW_NUMBER()
  OVER (PARTITION BY StoreID ORDER BY tds DESC)
  FROM 
  (
    SELECT StoreID, UPCCode, tds = SUM(TotalDollarSales)
    FROM Sales
    GROUP BY StoreID, UPCCode
  ) AS s2
)
Nach dem Login kopieren

Die Unterabfrage erstellt eine neue Tabelle s mit drei Spalten: StoreID, UPCCode und tds (insgesamt). Dollar-Verkäufe). Es enthält auch eine Rangfolgespalte rn, die jeder Zeile eine Rangfolge innerhalb ihres Speichers gibt. Das Ranking wird mit der Funktion ROW_NUMBER() generiert und nach der StoreID-Spalte unterteilt.

Um die fünf am häufigsten verkauften Artikel für jedes Geschäft zu extrahieren, kann die folgende Abfrage verwendet werden:

SELECT StoreID, UPCCode, TotalDollarSales = tds
FROM s
WHERE rn <= 5
ORDER BY StoreID, TotalDollarSales DESC;
Nach dem Login kopieren

Diese Abfrage wählt alle Zeilen aus der s-Tabelle aus, in denen der rn-Wert kleiner oder gleich 5 ist. Die Ergebnisse werden in absteigender Reihenfolge nach TotalDollarSales in jedem Geschäft sortiert. Infolgedessen enthält die Ausgabe die fünf am häufigsten verkauften Artikel für jedes Geschäft in der Verkaufstabelle. Diese Methode kombiniert die Verwendung von GROUP BY, Aggregatfunktionen und Ranking, um die angeforderten Daten effizient in einer einzigen Abfrage abzurufen.

Das obige ist der detaillierte Inhalt vonWie erhalte ich die Top-N-Elemente für jede Gruppe mithilfe der GROUP BY-Klausel von SQL?. 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