[MYSQL] Compter le nombre d'enregistrements par client

Le
Olivier Berquin
Bonjour tout le monde,

J'ai un petit soucis d'efficacité.

J'ai une table "Clients" toute simple:
cl_id [INT]
cl_code [VARCHAR] (Nom du client abrégé)
cl_nom [VARCHAR] (Nom complet)

Et une table "Jobs" un peu plus compliquée, mais les champs qui sont
concernés sont les suivants:
jo_id [INT]
jo_client [INT] (référence à cl_id)

Ma question est la suivante: comment faire pour avoir ne liste avec le
*nom* du client et à côté, le nombre de jobs réalisé pour ce clie=
nt.
Je peux faire ceci:
SELECT jo_client, count(*) FROM Jobs GROUP BY jo_client
qui me donne le jo_client et le nombre de job réalisé (count(*)).

Mais je voudrais un truc plus explicite
Client Nombre
APPLE 215
MICROSOFT 317
IBM 28
HP 1986

Je suis en train de faire deux requêtes, et ça m'emm bcp.
La première
SELECT jo_client, count(*) FROM Jobs GROUP BY jo_client
Et la seconde (pas finie) doit, pour chaque donnée reçue de cette
première requête aller dans la table "Clients" pour connaître le nom
du client.

N'y-t-il pas moyen de faire cela en une seule?

Merci beaucoup.

Oli.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Antoine Polatouche
Le #22831341
Le 22/11/2010 16:54, Olivier Berquin a écrit :
Bonjour tout le monde,


Bonjour,

N'y-t-il pas moyen de faire cela en une seule?



RTFM!

La solution est dans la doc mySQL de la fonction count():

mysql> SELECT student.student_name,COUNT(*)
-> FROM student,course
-> WHERE student.student_id=course.student_id
-> GROUP BY student_name;
Olivier Berquin
Le #22831831
On Nov 23, 2:15 am, Antoine Polatouche
Le 22/11/2010 16:54, Olivier Berquin a écrit :> Bonjour tout le monde,

Bonjour,

> N'y-t-il pas moyen de faire cela en une seule?

RTFM!



C'est toujours très agréable comme réponse...
Si je poste cette question, c'est bien parce que ça fait déjà quelque s
temps que je suis dessus, que j'ai regardé dans les 3 ou 4 bouquins
que j'ai à ma disposition et que j'ai déjà fait pas mal de recherche
sur le net...



La solution est dans la doc mySQL de la fonction count():

mysql> SELECT student.student_name,COUNT(*)
    ->        FROM student,course
    ->        WHERE student.student_id=course.student_id
    ->        GROUP BY student_name;



OK.
C'est presque ça, puisqu'il me manque une donnée.
Mais je fais avec.

Merci, donc!

Oli.
Antoine Polatouche
Le #22833491
Le 23/11/2010 09:33, Olivier Berquin a écrit :
On Nov 23, 2:15 am, Antoine Polatouche
Le 22/11/2010 16:54, Olivier Berquin a écrit :> Bonjour tout le monde,

Bonjour,

N'y-t-il pas moyen de faire cela en une seule?



RTFM!



C'est toujours très agréable comme réponse...
Si je poste cette question, c'est bien parce que ça fait déjà quelques
temps que je suis dessus, que j'ai regardé dans les 3 ou 4 bouquins
que j'ai à ma disposition et que j'ai déjà fait pas mal de recherche
sur le net...



Bon OK, la prochaine fois j'ajouterai un smiley.


La solution est dans la doc mySQL de la fonction count():

mysql> SELECT student.student_name,COUNT(*)
-> FROM student,course
-> WHERE student.student_id=course.student_id
-> GROUP BY student_name;



OK.
C'est presque ça, puisqu'il me manque une donnée.
Mais je fais avec.



Quelle donnée ?
Olivier Berquin
Le #22833971
Bon OK, la prochaine fois j'ajouterai un smiley.



Ha!
Ça aurait été bcp mieux, de fait.
J'aime bien les smiley!

D'autre part, comment aurais-je pu trouver cette commande de la
manuel?


> C'est presque a, puisqu'il me manque une donn e.
> Mais je fais avec.

Quelle donn e ?



Le champs "nom du client" (cl_nom) ->
SELECT jo_client, cl_nom, COUNT(*)
FROM Jobs, Clients
WHERE Jobs.jo_client = Clients.cl_id
GROUP BY jo_client


Je le répète: merci...

Oli.
Sebastien Lardiere
Le #22834071
On 11/23/2010 04:59 PM, Olivier Berquin wrote:
SELECT jo_client, cl_nom, COUNT(*)
FROM Jobs, Clients
WHERE Jobs.jo_client = Clients.cl_id
GROUP BY jo_client



Si on veut faire propre, on met tous les attributs dans le GROUP BY :

SELECT jo_client, cl_nom, COUNT(*)
FROM Jobs, Clients
WHERE Jobs.jo_client = Clients.cl_id
GROUP BY jo_client, cl_nom ;

Ca vous servira, le jour où vous utiliserez un vrai SGBDR.

Cdt,

--
Sébastien
Antoine Polatouche
Le #22834861
Le 23/11/2010 16:59, Olivier Berquin a écrit :
Bon OK, la prochaine fois j'ajouterai un smiley.



Ha!
Ça aurait été bcp mieux, de fait.
J'aime bien les smiley!

D'autre part, comment aurais-je pu trouver cette commande de la
manuel?


C'est presque a, puisqu'il me manque une donn e.
Mais je fais avec.



Quelle donn e ?



Le champs "nom du client" (cl_nom) ->
SELECT jo_client, cl_nom, COUNT(*)
FROM Jobs, Clients
WHERE Jobs.jo_client = Clients.cl_id
GROUP BY jo_client


Je le répète: merci...



mysql> SELECT student.student_name,COUNT(*)
-> FROM student,course
-> WHERE student.student_id=course.student_id
-> GROUP BY student_name;



En remplaçant mot à mot ça donne:

SELECT Clients.cl_nom, COUNT(*)
FROM Clients, Jobs
WHERE Clients.cl_id=Jobs.jo_client
GROUP BY cl_nom;
BOUDOU Joseph
Le #22897301
Sur fr.comp.applications.sgbd, Sebastien Lardiere disait :

Si on veut faire propre, on met tous les attributs dans le GROUP BY :



Oui et tant qu'à y être on fait une vraie jointure :

SELECT c.cl_id, c.cl_nom, count(*)
FROM Jobs j JOIN Clients c ON j.jo_client = c.cl_id
GROUP BY c.cl_id, c.cl_nom

--
BOUDOU Joseph
Publicité
Poster une réponse
Anonyme