SQL Group BY: Abrufen der Top-N-Elemente für jede Gruppe
Beim Arbeiten mit Daten in SQL ist es oft notwendig, Datensätze basierend auf zu gruppieren gemeinsame Kriterien und führen Berechnungen oder Aggregationen innerhalb jeder Gruppe durch. Hier kommt die GROUP BY-Klausel ins Spiel. In diesem Artikel wird eine leistungsstarke Technik beschrieben, die GROUP BY mit der Funktion ROW_NUMBER() kombiniert, um die Top-N-Artikel für jede Gruppe in einer einzigen Abfrage effizient abzurufen.
Problem: Meistverkaufte Artikel pro Geschäft
Stellen Sie sich ein Szenario vor, in dem wir eine Sales-Tabelle mit den Spalten UPCCode, SaleDate, StoreId und TotalDollarSales haben. Die Aufgabe besteht darin, die fünf am häufigsten verkauften Artikel in jedem Geschäft zu identifizieren.
Abfrage:
Wir könnten dieses Problem mit mehreren einzelnen Abfragen mithilfe von UNION angehen, aber das ist möglicherweise nicht der Fall effizient sein. Stattdessen nutzt die folgende Abfrage eine Unterabfrage und die Funktion ROW_NUMBER():
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 ) SELECT StoreID, UPCCode, TotalDollarSales = tds FROM s WHERE rn <= 5 ORDER BY StoreID, TotalDollarSales DESC;
Erklärung:
Fazit:
Mit dieser erweiterten SQL-Abfrage können Sie die Top-N-Elemente für jede Gruppe effizient erfassen und so gängige Datenverarbeitungsszenarien elegant angehen und verbessern Ihre Fähigkeiten zur Abfrageoptimierung.
Das obige ist der detaillierte Inhalt vonWie kann ich mit SQLs GROUP BY effizient die Top-N-Elemente für jede Gruppe abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!