Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
941 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] [Résolu] Requete avec COUNT et GROUP BY

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] [Résolu] Requete avec COUNT et GROUP BY

n°694338
cybervince
It's all good man
Posté le 07-04-2004 à 01:45:10  profilanswer
 

Alors le soucis est le suivant.
J'ai 2 tables:
 

CENTRES        CENTRES_COMMENT    
----------     ------------------------------
num_centre     num_comment
...            #num_centre
               libelle_centre   ...

     
 
 
Je souhaite pour chaque enregistrement de CENTRES récupérer le nombre d'occurences contenues dans CENTRES_COMMENT. Même pour les centres pour lesquels il n'y a pas d'occurences.
La requête que j'ai faite est la suivante et ne me renvoie les centres que pour lesquels il y a des occurences dans la seconde table

Code :
  1. SELECT A.num_centre, count(B.num_centre)
  2. FROM centres A, centres_comment B
  3. WHERE A.num_centre = B.num_centre
  4. GROUP  BY A.num_centre


 
Avez vous une idée pour comment résoudre mon soucis.
Merci d'avance


Message édité par cybervince le 07-04-2004 à 04:06:48

---------------
SaulGoodman.fr: Actus sur la série Better Call Saul
mood
Publicité
Posté le 07-04-2004 à 01:45:10  profilanswer
 

n°694360
Jubijub
Parce que je le VD bien
Posté le 07-04-2004 à 03:35:33  profilanswer
 

c normal tu fais une jointure sur num_centre : ta clause where ne va te renvoyer que les enregistrement pour lesquels il existe qqc dans les 2 tables...


---------------
Jubi Photos : Flickr - 500px
n°694361
Jubijub
Parce que je le VD bien
Posté le 07-04-2004 à 03:38:53  profilanswer
 

y doit y avoir moyen avec des select imbriqués...mais l ca dépasse mes compétences...


---------------
Jubi Photos : Flickr - 500px
n°694362
cybervince
It's all good man
Posté le 07-04-2004 à 03:39:50  profilanswer
 

Oui, d'un autre coté, comment puis-je faire autrement que par cette jointure ?
Seule une imbrication de requêtes pourrait-elle me sortir de ce tracas ?


---------------
SaulGoodman.fr: Actus sur la série Better Call Saul
n°694363
cybervince
It's all good man
Posté le 07-04-2004 à 03:42:11  profilanswer
 

Jubijub a écrit :

y doit y avoir moyen avec des select imbriqués...mais l ca dépasse mes compétences...


Ah ben pile poil pendant que je postai.
J'ai essayé une requête imbriquée justement, mais sans succès.
Il doit y avoir moyen mais je n'ai pas trouvé pour le moment.
Y'a bien une solution pour résoudre le problème au niveau du script PHP qui serait derrière, mais c'est pas la solution la plus "merisement" propre, car ca serait de créer des infos redondantes en base.


---------------
SaulGoodman.fr: Actus sur la série Better Call Saul
n°694364
cram
Posté le 07-04-2004 à 03:43:52  profilanswer
 

Code :
  1. SELECT
  2. A.num_centre,
  3. (SELECT count(B.num_centre)
  4. FROM centres_comment B
  5. WHERE B.num_centre = A.num_centre)
  6. FROM centres A


 
 
c'est pas très beau mais ca fonctionne
(enfin de tête j'ai pas testé)


Message édité par cram le 07-04-2004 à 03:44:29
n°694365
cybervince
It's all good man
Posté le 07-04-2004 à 03:48:26  profilanswer
 

Oui c'est la requête imbriquée (mode pas propre) à laquelle j'ai pensé, mais malheureusement niveau syntaxe, MySQL aime pas:
 

Code :
  1. SELECT A.num_centre, (
  2. SELECT count( B.num_centre )
  3. FROM centres_comment B
  4. WHERE B.num_centre = A.num_centre
  5. )
  6. FROM centres A
  7. MySQL a répondu:
  8. #1064 - You have an error in your SQL syntax near 'SELECT count( B.num_centre )
  9. FROM centres_comment B
  10. WHERE B.num_centre = A.num_' at line 2


 
Pourtant sur le papier d'après mes souvenirs, c'est censé marcher. Enfin jvois pas l'erreur


---------------
SaulGoodman.fr: Actus sur la série Better Call Saul
n°694366
Jubijub
Parce que je le VD bien
Posté le 07-04-2004 à 03:52:21  profilanswer
 

SELECT A.num_centre, count(B.num_centre)
  FROM centres A LEFT OUTER JOIN centres_comment B
  WHERE A.num_centre = B.num_centre
  GROUP  BY A.num_centre
 
essaye ca...l'idée de faire une jointure externe...la jointure à gauche permet ici de récupérer les centres qui n'ont pas de commentaires...mais la syntaxe est peut etre à chier...


Message édité par Jubijub le 07-04-2004 à 03:53:51

---------------
Jubi Photos : Flickr - 500px
n°694367
cybervince
It's all good man
Posté le 07-04-2004 à 03:56:12  profilanswer
 

Jubijub a écrit :

SELECT A.num_centre, count(B.num_centre)
  FROM centres A LEFT OUTER JOIN centres_comment B
  WHERE A.num_centre = B.num_centre
  GROUP  BY A.num_centre
 
essaye ca...l'idée de faire une jointure externe...la jointure à gauche permet ici de récupérer les centres qui n'ont pas de commentaires...mais la syntaxe est peut etre à chier...


 
#1064 - You have an error in your SQL syntax near 'WHERE A.num_centre = B.num_centre
GROUP  BY A.num_centre LIMIT 0, 30' at line 4
 
J'avais effectivement vu des OUTER JOIN dans la doc mais ne maitrisant pas la chose, j'ai pas insisté.


---------------
SaulGoodman.fr: Actus sur la série Better Call Saul
n°694368
Jubijub
Parce que je le VD bien
Posté le 07-04-2004 à 03:58:01  profilanswer
 

c l'idée, parce que la jointure naturelle va de fait exclure les éléments qui n'ont pas d'équivalent dans l'autre table...
 
regarde la doc, parce que je crois que c vraiment le chemin...


---------------
Jubi Photos : Flickr - 500px
mood
Publicité
Posté le 07-04-2004 à 03:58:01  profilanswer
 

n°694369
cybervince
It's all good man
Posté le 07-04-2004 à 03:59:16  profilanswer
 

Wai, jvais me plonger dans le OUTER JOIN et bidouiller un peu dedans. Je finirai par trouver, car c'est obligé, cette requête elle doit exister.


---------------
SaulGoodman.fr: Actus sur la série Better Call Saul
n°694370
cram
Posté le 07-04-2004 à 04:02:22  profilanswer
 

Code :
  1. SELECT A.num_centre, count(B.num_centre)
  2.   FROM centres A, centres_comment B
  3.   WHERE A.num_centre = B.num_centre(+)
  4.   GROUP  BY A.num_centre


 
juste en rajoutant la jointure externe  
 
par contre je sais plus si jointure externe et group by font bon menage ....

n°694371
Jubijub
Parce que je le VD bien
Posté le 07-04-2004 à 04:03:27  profilanswer
 

SELECT A.num_centre, count(B.num_centre)
  FROM centres A LEFT OUTER JOIN centres_comment B  
  ON A.num_centre = B.num_centre
  GROUP  BY A.num_centre  
 
faut un "on" apparement :  
http://www.mysql.com/documentation [...] .html#JOIN


---------------
Jubi Photos : Flickr - 500px
n°694372
cybervince
It's all good man
Posté le 07-04-2004 à 04:04:01  profilanswer
 

cram a écrit :

Code :
  1. SELECT A.num_centre, count(B.num_centre)
  2.   FROM centres A, centres_comment B
  3.   WHERE A.num_centre = B.num_centre(+)
  4.   GROUP  BY A.num_centre


 
juste en rajoutant la jointure externe  
 
par contre je sais plus si jointure externe et group by font bon menage ....


 
Nan il aime pas la syntaxe non plus.
Par contre le GROUP BY lui il est nécessaire il me semble dès lors qu'on veut faire un COUNT.


---------------
SaulGoodman.fr: Actus sur la série Better Call Saul
n°694373
Jubijub
Parce que je le VD bien
Posté le 07-04-2004 à 04:04:30  profilanswer
 

cram a écrit :

Code :
  1. SELECT A.num_centre, count(B.num_centre)
  2.   FROM centres A, centres_comment B
  3.   WHERE A.num_centre = B.num_centre(+)
  4.   GROUP  BY A.num_centre


 
juste en rajoutant la jointure externe  
 
par contre je sais plus si jointure externe et group by font bon menage ....


 
c pas SQL compliant ;)...pas tous les SGBDR supportent cette notation


---------------
Jubi Photos : Flickr - 500px
n°694374
cybervince
It's all good man
Posté le 07-04-2004 à 04:05:33  profilanswer
 

Jubijub a écrit :

SELECT A.num_centre, count(B.num_centre)
  FROM centres A LEFT OUTER JOIN centres_comment B  
  ON A.num_centre = B.num_centre
  GROUP  BY A.num_centre  
 
faut un "on" apparement :  
http://www.mysql.com/documentation [...] .html#JOIN


 
Oh yeah Jubijub, t'es mon sauveur.
Ca fait exactement ce que je voulai.
Tu m'a pris de vitesse dans la doc.
Merci beaucoup


---------------
SaulGoodman.fr: Actus sur la série Better Call Saul
n°694376
cram
Posté le 07-04-2004 à 04:08:50  profilanswer
 

un truc a marquer sur le coin du bureau pour la prochaine fois ....
 
je le note :D

n°694377
Jubijub
Parce que je le VD bien
Posté le 07-04-2004 à 04:09:45  profilanswer
 

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
Je tiens à préciser que :  
- je ne connais absolument pas mySQL, je m'en suis jamais servi de ma vie
- je suis une quiche en SQL, justement à cause des jointures dont j'ai du mal à maitriser les syntaxes (mais je débute hein)
 
Bref, résoudre un pb sans rien y connaitre, avec une solution SQL2 compliant, portable et standard, c la classe :sol:
 
Je suis très fier de moi sur ce coup..c immodeste au possible, mais tant pis :D


---------------
Jubi Photos : Flickr - 500px
n°694378
cybervince
It's all good man
Posté le 07-04-2004 à 04:13:39  profilanswer
 

Clair que la syntaxe est notée de mon coté.
En effet Jubijub, chapeau si en plus t'es pas une bête en SQL.
Ensuite pour MySQL, j'avoue que ca respecte assez bien la syntaxe SQL standard (après tout, c'est un peu pour être standard que c'est utilisé)


---------------
SaulGoodman.fr: Actus sur la série Better Call Saul
n°694380
Jubijub
Parce que je le VD bien
Posté le 07-04-2004 à 04:19:50  profilanswer
 

ben comme je suis étudiant, on nous forme aux standards...donc on fait du SQL92 le plus possible, sans trop coller aux dialectes SQL propres aux sgbdr...le +, c un dialect, le left join, c du standard...


---------------
Jubi Photos : Flickr - 500px
n°694382
cybervince
It's all good man
Posté le 07-04-2004 à 04:33:13  profilanswer
 

En effet, tant que t'es étudiant, on te forme aux standards (SQL, Algorithmique...). Ensuite la mise en pratique sur le terrain n'est plus qu'une question de traduction. Le tout est d'avoir la logique de raisonnement. Une fois la requête écrite, il n'est plus bien compliqué de l'adapter à MySQL, Oracle ou DB2...


---------------
SaulGoodman.fr: Actus sur la série Better Call Saul
n°694383
Jubijub
Parce que je le VD bien
Posté le 07-04-2004 à 04:34:18  profilanswer
 

c surtout que c plus facile qd t'a un oeil externe sur la requete...parce que qd t dedans, les choses les plus évidentes foutent le camp :D


---------------
Jubi Photos : Flickr - 500px
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] [Résolu] Requete avec COUNT et GROUP BY

 

Sujets relatifs
Mettre à jour une table depuis un fichier formaté CVS dans SQL SERVERUpload de fichier (probleme résolu :D)
[javax][sql]Connection java/sSql Server[SQL][Compris]foreign key
Que représente % en SQL (aide pour moteur de recherche)[résolu] récuperer la valeur de l'opération "power (10,2) "
Hébergement SQL avec port 3306 accessibleRequete SQL Oracle : Pourquoi ca ne marche pas ?
[MYSQL] UPDATE multiple sur une table [Résolu] 
Plus de sujets relatifs à : [SQL] [Résolu] Requete avec COUNT et GROUP BY


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR