Bonjour,
J'ai 2 tables, clients et commandes.
J'ai fait une requête qui m'affiche la listes des clients ainsi que le nombre total de commandes passés par chaque client et la somme totale des commandes.
Voici la requête en question:
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT c.id_customer, c.firstname, c.lastname, c.email, c.register_date, o.current_state, COUNT(o.id_customer) AS sales, SUM(o.total_amout) AS total_sales FROM customer c LEFT JOIN orders o ON o.id_customer = c.id_customer GROUP BY c.id_customer ORDER BY c.register_date DESC
(N'hésitez pas à me faire part de vos remarques/conseils si vous pensez que ma requête est complètement naze et/ou qu'on peut vraiment l'optimiser)
Cette requête fonctionne seulement j'aimerais maintenant pouvoir ne comptabiliser que les commandes (et le total de celles-ci) qui ont un statut spécifique (à la deuxième ligne) grâce à la colonne order.current_state.
C'est-à-dire ne comptabiliser que les commandes qui ont bien été livrés et qui n'ont pas été annulés/remboursés par exemple (ex. WHERE order.current_state = 3).
Merci d'avance!
EDIT
Je pense avoir trouvé une solution avec "CASE" que je ne connaissais pas.
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT c.id_customer, c.firstname, c.lastname, c.email, c.register_date, o.current_state, COUNT(case when o.current_state = 3 then o.id_customer else NULL end) AS sales, SUM(case when o.current_state = 3 then o.total_amout else 0 end) AS total_sales FROM customer c LEFT JOIN orders o ON o.id_customer = c.id_customer GROUP BY c.id_customer ORDER BY c.register_date DESC
Je vais donc marquer le sujet comme résolu.
Ceci dit, si vous pensez que ma requête est trop complexe pour le résultat souhaité et que l'on peut vraiment l'optimiser je suis également toujours preneur!
Partager