Maison > base de données > tutoriel mysql > Comment obtenir les N premiers éléments de chaque groupe à l'aide de la clause GROUP BY de SQL ?

Comment obtenir les N premiers éléments de chaque groupe à l'aide de la clause GROUP BY de SQL ?

Barbara Streisand
Libérer: 2024-12-19 07:24:13
original
873 Les gens l'ont consulté

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

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
)
Copier après la connexion

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal