Vous n'êtes pas identifié(e).
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
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
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
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