Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 06/11/2013 10:55:50
- Thomas Williamson
- Membre
[RESOLU] Requête avec count() dans plusieurs tables
Bonjour,
J'ai les tables suivantes :
- commune (gid, insee, nom)
- vanne (gid, type, date, insee)
- ventouse (gid, type, date, insee)
J'exécute la requête suivante pour comptabiliser le nombre de vannes et de ventouses par commune :
SELECT
a.insee AS commune,
count(b.gid) AS nb_vanne,
count(c.gid) AS nb_ventouse
FROM commune a
LEFT JOIN vanne b ON a.insee = b.insee
LEFT JOIN ventouse c ON a.insee = c.insee
WHERE a.insee = '86000'
GROUP BY a.insee ;
Le résultat de requête me donne 21840 vannes et 21840 ventouses alors que j'en ai en réalité respectivement 312 et 70... En effet, si je supprime l'un des deux count() et l'un des deux LEFT JOIN correspondant, j'obtiens le bon chiffre. Je ne vois pas trop d'où vient ce problème. Je précise que j'utilise la table commune pour pouvoir afficher l'ensemble des communes et non seulement celles référencées dans les tables vanne et ventouse.
Merci pour votre avis !
Thomas
Dernière modification par Thomas Williamson (06/11/2013 15:03:19)
Hors ligne
#2 06/11/2013 12:07:24
- arthurr
- Membre
Re : [RESOLU] Requête avec count() dans plusieurs tables
bonjour,
je ne connais pas assez bien votre base, mais un DISTINCT dans le count est peut être suffisant :
SELECT
a.insee AS commune,
count(distinct b.gid) AS nb_vanne,
count(distinct c.gid) AS nb_ventouse
FROM commune a
LEFT JOIN vanne b ON a.insee = b.insee
LEFT JOIN ventouse c ON a.insee = c.insee
WHERE a.insee = '86000'
GROUP BY a.insee ;
Hors ligne
#3 06/11/2013 12:26:29
- Thomas Williamson
- Membre
Re : [RESOLU] Requête avec count() dans plusieurs tables
Parfait avec la clause DISTINCT ! Je récupère bien les chiffres voulus. Par contre, après avoir regardé la doc sur ce sujet, je ne comprends pas l'utilisation de DISTINCT sur un gid (clé primaire) car cette colonne est sensée stocker des valeurs uniques... Ça doit tenir au fait que j'interroge plusieurs tables , non ?
Dernière modification par Thomas Williamson (06/11/2013 12:26:49)
Hors ligne
#4 06/11/2013 14:57:43
- arthurr
- Membre
Re : [RESOLU] Requête avec count() dans plusieurs tables
Si vous avez plusieurs ventouses (id 1 et id 2) pour une vanne (id 1), la vanne (id 1) va être compté 2 fois dans le count(v.id).
Avec le distinct, elle ne va être compté qu'une seule fois.
Hors ligne