Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[MYSQL] Compter le nombre d'enregistrements par client

7 réponses
Avatar
Olivier Berquin
Bonjour tout le monde,

J'ai un petit soucis d'efficacit=E9.

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

Et une table "Jobs" un peu plus compliqu=E9e, mais les champs qui sont
concern=E9s sont les suivants:
jo_id [INT]
jo_client [INT] (r=E9f=E9rence =E0 cl_id)

Ma question est la suivante: comment faire pour avoir ne liste avec le
*nom* du client et =E0 c=F4t=E9, le nombre de jobs r=E9alis=E9 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=E9alis=E9 (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=EAtes, et =E7a m'emm... bcp.
La premi=E8re
SELECT jo_client, count(*) FROM Jobs GROUP BY jo_client
Et la seconde (pas finie) doit, pour chaque donn=E9e re=E7ue de cette
premi=E8re requ=EAte aller dans la table "Clients" pour conna=EEtre le nom
du client.

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

Merci beaucoup.

Oli.

7 réponses

Avatar
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!

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;
Avatar
Olivier Berquin
On Nov 23, 2:15 am, Antoine Polatouche wrote:
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.
Avatar
Antoine Polatouche
Le 23/11/2010 09:33, Olivier Berquin a écrit :
On Nov 23, 2:15 am, Antoine Polatouche wrote:
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 ?
Avatar
Olivier Berquin
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.
Avatar
Sebastien Lardiere
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
Avatar
Antoine Polatouche
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;
Avatar
BOUDOU Joseph
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