2013-09-06 2 views
0

Je veux savoir combien de clients ont passé plus d'une commande, groupés par jour. Mais je souhaite exclure les commandes qui ont été annulées.Trouver des clients avec plus d'une commande groupée par jour

  • J'ai une table client avec les clients

  • J'ai une table de Commande_Client avec les commandes (lorsqu'une commande est annulée il reste dans la table Commande_Client)

  • J'ai une table order_item (où les commandes sont originaux, et aussi commandes annulées, les commandes annulées obtiennent un nouvel ordre de crédit, et le id ordre original apparaît dans la ligne de id_credit_order de l'ordre crédit )

Je veux quelque chose comme ceci:

date | no of customers with 1 order | no of customers with 2 orders | no of customers with 3 order | etc. 

Mais je ne veux pas l'ordre si le nombre original a été annulé!

J'ai maintenant cette requête, mais ce n'est certainement pas assez, quelqu'un sait comment obtenir mon résultat? Merci!

SELECT DATE(co.date_order), COUNT(co.id_customer) 
FROM customer_order co 
GROUP BY DATE(co.date_order) 
ORDER BY DATE(co.date_order) DESC; 

Répondre

0

Essayez d'utiliser une clause HAVING.

SELECT DATE(co.date_order), COUNT(co.id_customer) 
FROM customer_order co 
WHERE co.Cancelled = 0 
GROUP BY DATE(co.date_order) 
HAVING COUNT(co.id_customer) >= 1 
ORDER BY DATE(co.date_order) DESC; 
0

Faites un essai. Changez le WHERE pour refléter la façon dont vous annulez les commandes.

SELECT DATE(co.date_order), COUNT(co.id_customer) 
FROM customer_order co 
WHERE co.cancelled = 0 
GROUP BY DATE(co.date_order) 
HAVING COUNT(co.id_customer) > 0 
ORDER BY DATE(co.date_order) DESC; 
1

La question est un peu trompeur, comme vous demandez d'abord le nombre de clients avec plus d'un ordre, alors vous demandez le nombre de clients avec chacun 1, 2, 3 ... commandes.

Voici quelque chose qui vous donnera les chiffres, mais sans point. Vous aurez besoin de mettre le nom de la colonne de droite pour o.id

Select -- outer query takes each order count and counts how many customers have that many 
    co.date_order, 
    co.customer_order_count, 
    count(*) as customer_count 
From (
    Select -- inner query counts how many valid orders each customer has 
     o.date_order, 
     o.id_customer, 
     count(*) as customer_order_count 
    From 
     customer_order o 
    Where 
     o.id_credit_order is null and -- rule out credit orders 
     not exists (-- rule out orders with related credit orders 
      select 
       'x' 
      from 
       customer_order c 
      where 
       c.id_credit_order = o.id -- column name isn't mentioned in the question 
     ) 
    Group By 
     o.date_order, 
     o.id_customer 
    ) co 
Group By 
    co.date_order, 
    co.customer_order_count 
Order By 
    co.date_order desc, 
    co.customer_order_count 
Questions connexes