Les N principaux éléments pour chaque groupe utilisant SQL Group By
Dans une base de données, la clause GROUP BY est utilisée pour regrouper les lignes d'une table basé sur des valeurs communes dans une ou plusieurs colonnes. Lorsqu'il est combiné avec des fonctions d'agrégation telles que SUM(), il peut être utilisé pour calculer des statistiques pour chaque groupe. Cependant, dans certains cas, il peut être nécessaire d'extraire les N premiers articles de chaque groupe.
Une approche de ce problème consiste à utiliser une sous-requête pour calculer les ventes totales de chaque article dans chaque magasin, puis à les classer. les au sein de chaque magasin. Ceci peut être réalisé en utilisant la fonction ROW_NUMBER() pour générer un classement pour chaque ligne, partitionné par magasin :
;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 )
La sous-requête crée une nouvelle table s avec trois colonnes : StoreID, UPCCode et tds (total ventes en dollars). Il comprend également une colonne de classement rn, qui donne à chaque ligne un classement au sein de son magasin. Le classement est généré à l'aide de la fonction ROW_NUMBER() et est partitionné par la colonne StoreID.
Pour extraire les 5 articles les plus vendus pour chaque magasin, la requête suivante peut être utilisée :
SELECT StoreID, UPCCode, TotalDollarSales = tds FROM s WHERE rn <= 5 ORDER BY StoreID, TotalDollarSales DESC;
Cette requête sélectionne toutes les lignes de la table s où la valeur rn est inférieure ou égale à 5. Les résultats sont triés par ordre décroissant par TotalDollarSales au sein de chaque magasin. Par conséquent, la sortie contiendra les 5 articles les plus vendus pour chaque magasin dans le tableau Ventes. Cette méthode combine l'utilisation de GROUP BY, de fonctions d'agrégation et de classement pour récupérer efficacement les données demandées en une seule requête.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!