Maison >base de données >tutoriel mysql >Comment récupérer les N articles les plus vendus par magasin à l'aide d'une seule requête SQL ?

Comment récupérer les N articles les plus vendus par magasin à l'aide d'une seule requête SQL ?

DDD
DDDoriginal
2024-12-21 12:50:11306parcourir

How to Retrieve the Top N Sold Items per Store Using a Single SQL Query?

Requête SQL pour récupérer les N articles les plus vendus par groupe

Dans cette question, un utilisateur recherche une requête SQL pour récupérer les 5 meilleurs articles vendus articles pour chaque magasin en une seule requête. La table fournie, Sales, contient des colonnes telles que UPCCode, SaleDate, StoreId et TotalDollarSales.

Afin d'obtenir le résultat souhaité, nous pouvons utiliser une combinaison de sous-requêtes et de partitionnement au sein d'une seule requête SQL. Voici une répartition détaillée :

  1. Sous-requête pour calculer la somme des ventes pour chaque code UPC :

    • Calculez la somme des TotalDollarSales pour chaque unique combinaison de StoreId et UPCCode.
  2. Ajouter un numéro de ligne aux résultats partitionnés :

    • Partitionner les résultats par StoreId et attribuer un numéro de ligne à chaque ligne par ordre décroissant de TotalDollarSales.
  3. Sélectionnez les N meilleurs articles pour chaque magasin :

    • Filtrez les résultats pour inclure uniquement les lignes où la ligne le nombre est inférieur ou égal à 5. Cela fournira les 5 premiers éléments pour chaque magasin.
  4. Récupérer les résultats finaux :

    • Sélectionnez StoreId, UPCCode et TotalDollarSales pour les 5 meilleurs articles pour chaque magasin.

Voici la requête SQL complète qui combine ces étapes :

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;

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!

Déclaration:
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