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 )
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;
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!