SQL Group BY : récupérer les N principaux éléments pour chaque groupe
Lorsque vous travaillez avec des données dans SQL, il est souvent nécessaire de regrouper les enregistrements en fonction de critères communs et effectuer des calculs ou des agrégations au sein de chaque groupe. C'est là qu'intervient la clause GROUP BY. Cet article présente une technique puissante qui combine GROUP BY avec la fonction ROW_NUMBER() pour récupérer efficacement les N articles les plus vendus pour chaque groupe en une seule requête.
Problème : articles les plus vendus par magasin
Considérons un scénario dans lequel nous avons une table Sales avec les colonnes UPCCode, SaleDate, StoreId et TotalDollarSales. La tâche consiste à identifier les 5 articles les plus vendus dans chaque magasin.
Requête :
Nous pourrions aborder ce problème avec plusieurs requêtes individuelles en utilisant UNION, mais ce n'est peut-être pas le cas. être efficace. Au lieu de cela, la requête suivante exploite une sous-requête et la fonction 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;
Explication :
Conclusion :
Cette requête SQL avancée vous permet de rassembler efficacement les N principaux éléments de chaque groupe, en abordant avec élégance les scénarios de traitement de données courants et en améliorant vos compétences en optimisation de requêtes.
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!