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:
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
Jusque la tout va bien

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 :
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
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.

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?