MySQL – On redécouvre les requêtes imbriquées.

Bonsoir,

Confronté a un petit souci de stats je devais calculer à l’intérieur d’une requete le resultat d’une autre requête.

Grosso modo, je dois compter le nombre de resultats d’une sous requete et utilisé ce resultats comme champ de ma requete principale. Le tout par lignes resultant de ma requetes principale. Je sais je suis pas tres clair. mais je vais m’expliquer.

Nous avons une table clients et une table commande. Je souhaiterai ordonner mes clients par nombre de commande.

Je vais donc dans ma sous requete, compter le nombre de commande par client :

 SELECT count(DISTINCT num_commande) FROM commande WHERE client_id = X # X est mon numéro de client.

Bon jusque là rien de bien difficile. Le but est maintenant de faire ca pour tous les clients et de “stocker” ce résultat comme clé de tri pour la requete principale.

SELECT c.*, (SELECT count(distinct o.num_commande) FROM commande o WHERE o.client_id = c.client_id) as total FROM clients s ORDER BY total DESC

Cette requete nous permet de calculer le nombre de commandes par clients et ainsi d’ordonner par le nombre de comandes de chaque client : le champ “total”. Il faut bien penser a faire le lien en nommant précisement le champ utilisé dans la requete principale (“c.client_id”).

Je sais que c’est pas grand chose, dans l’absolu, mais ca vient de me rendre un très très grand service ! Je passe de 37 secondes d’execution à 0.017 secondes d’execution : Le jeu en vaut la chandelle.

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.