Bonjour à tous,
Je travaille sur une base de donnée issue de mon sote de vente en ligne. Afin de connaitre au mieux le comportement de mes clients, je créé quelques requetes.
Ma demande est un peu longue mais j ai essayé d etre le plus clair possible...
J'ai créé une requete pour connaitre le nombre de commandes par client avec le CA total correspondant:
Jusque la tout va bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT COUNT( * ) AS nb_cde, sum( `order_total` ) AS CAtot, oder.`user_id` , user.last_name, user.zip, oder.`order_total` , oder.`order_status` FROM jos_vm_orders oder, jos_vm_user_info user WHERE order_status = "E" AND oder.user_id = user.user_id GROUP BY oder.user_id ORDER BY `nb_cde` DESC, CAtot DESC
Maintenant je souhaite faire l'analyse sur un mois en question
Les informations se trouvent sur la table jos_vm_order_history constituée des champs suivants :
- order_id (la jointure avec la table jos_vm_order),
- order_status_code (code commande qui doit etre egal à E pour etre valide ie commande envoyée)
- date_added (la date)
J'inclus donc la requete dans la clause where :
Le problème : quand un user_id a passé plusieures commandes, la requete prend l'ensemble des order_id s'il y a au moins un order_status_code egal à E.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SELECT COUNT( * ) AS nb_cde, sum( `order_total` ) AS CAtot, oder.`user_id` , user.last_name, user.zip, oder.`order_total` , oder.`order_status` FROM jos_vm_orders oder, jos_vm_user_info user, jos_vm_order_history hist WHERE order_status = "E" AND oder.user_id = user.user_id AND hist.order_id = oder.order_id AND hist.order_status_code = "E" AND hist.date_added BETWEEN '2008-04-01 00:00:00' AND '2008-04-30 23:59:59' GROUP BY oder.user_id ORDER BY `nb_cde` DESC , CAtot DESC
Cause : la clause group BY englobe les l'ensemble des order_status_code
Il faudrait donc que je lance la requete sur la table jos_vm_order_history en dehors de la claude Group BY : comment faire?
Partager