Page 1 sur 1

Compter des données dispersées en une seule requête

Posté : 20 août 2012, 23:25
par finipe
Bonjour à tous,

Je voudrais faire une requête particulière, mais n'ai même pas le moindre début d'idée pour y parvenir...

J'ai une table d'utilisateurs, ou chaque entrée est identifiée par un champ unique "id".
J'ai une table de commandes, ou chaque entrée contient un champ "id_user" correspondant à l'id d'un des utilisateurs.

Je voudrais faire une requête qui selectionnerait tous les utilisateurs par ordre croissant/décroissant de nombre de commandes.
Comment puis-je faire ça ?

Merci pour votre aide.

Re: Compter des données dispersées en une seule requête

Posté : 21 août 2012, 00:31
par sadeq
Liste des utilisateurs qui ont commandé par ordre croissant du nombre de commandes
SELECT u.*, COUNT(c.id_user) as Nb_commandes
FROM utilisateurs u JOIN commandes c ON u.id=c.id_user
GROUP BY c.id_user
ORDER BY COUNT(c.id_user)
Liste des utilisateurs qui ont commandé par ordre décroissant du nombre de commandes
SELECT u.*, COUNT(c.id_user) as Nb_commandes
FROM utilisateurs u JOIN commandes c ON u.id=c.id_user
GROUP BY c.id_user
ORDER BY COUNT(c.id_user) DESC
ici on a utilisé DESC

Liste de tous les utilisateurs (même ceux qui n'ont pas de commandes) par ordre croissant du nombre de commandes
SELECT u.*, COUNT(c.id_user) as Nb_commandes
FROM utilisateurs u LEFT JOIN commandes c ON u.id=c.id_user
GROUP BY c.id_user
ORDER BY COUNT(c.id_user)
ici on a utilisé LEFT JOIN

Re: Compter des données dispersées en une seule requête

Posté : 21 août 2012, 02:16
par finipe
Et ça marche du premier coup, super !
Merci beaucoup.

Je vais étudier de près cette requête, car je n'y ai pas compris grand chose (décidément, sorti des SELECT, INSERT, UPDATE et DELETE, je suis une chèvre en sql :roll:).