2010-07-30 5 views
1

J'ai rogné mon cerveau avec mes connaissances SQL limitées tout en essayant de trouver une requête pour exécuter une statistique sur ma base de données de commandes.Utilisation de SQL pour trouver le nombre total de clients avec plus de X commandes

Table ORDRES est disposé comme ceci:

CustomerID ProductID (etc) 
1    10 
1    10 
1    11 
2    10 
4    9 

Chaque achat est enregistré avec le numéro de client et l'ID du produit - il peut y avoir plusieurs enregistrements pour le même client, et même plusieurs enregistrements avec le même client et produit.

J'ai besoin de trouver une réponse qui peut retourner le nombre de clients qui ont acheté entre X et X produits distincts - par exemple, 3 clients ont acheté moins de 5 produits différents, 10 achetés à 5-10 produits différents, 1 acheté plus de 10 produits différents.

Je suis assez sûr que cela a quelque chose à voir avec les tables dérivées, mais le SQL avancé est une nouveauté assez artisanale pour moi. Toute aide serait appréciée!

Répondre

3

Essayez ceci:

SELECT T1.products_bought, COUNT(T2.cnt) AS total 
FROM (
    SELECT '<5' AS products_bought, 0 AS a, 4 AS b 
    UNION ALL 
    SELECT '5-10', 5, 10 
    UNION ALL 
    SELECT '>10', 11, 999999 
) T1 
LEFT JOIN 
(
    SELECT COUNT(DISTINCT ProductID) AS cnt 
    FROM ORDERS 
    GROUP BY CustomerID 
) T2 
ON T2.cnt BETWEEN T1.a AND T1.b 
GROUP BY a, b 

Résultat:

products_bought total 
<5    3  
5-10    0  
>10    0  
+0

Fonctionne parfaitement Mark, vous êtes une bouée de sauvetage. – MarathonStudios

Questions connexes