Page 1 sur 1

Count avec jointure

Posté : 04 mars 2015, 12:31
par aly91
Bonjour,
J'ai un problème sur une requête.
J'ai deux tables toto et tata. Dans la table toto, j'ai les champs region, Ville, quartier. Et dans la table tata, j'ai les champs Ville, alarme, date.
Maintenant, mes tables sont remplies comme suit :
pour Toto
Clermont | UneVilleDansClermont | x
Clermont | UneautreVilleDansClermont | y
Clermont | EncoreUneVilleDansClermont | z
ANNECY | UneVilleDansAnnecy | t

pour Tata

UneVilleDansClermont| Majeur | 03/02/2015

Maintenant quand je fais la requête suivante
Select a.region, a.Ville, b.alarme, b.date, count(*) from toto a INNER JOIN tata b ON a.Ville=b.Ville
Il me renvoie
Clermont | UneVilleDansCLERMONT | Majeur | 03/02/2015 | 3
Le problème en est que le count est égale à 3 alors que moi je veux qu'il soit à 1 car je veux compter qu'une seule occurence et il y'en a qu'une.Je fais la jointure pour rajouter tout juste le champos région.
En espérant que vous avez compris mon problème.
Merci d'avance.
Bien cordialement.

Re: Count avec jointure

Posté : 04 mars 2015, 15:15
par yann18
bonjour,
pour ignorer les duplicatas issus de ta requête, tu peux soit passer à la fonction COUNT l'instruction DISTINCT Toto.VILLE soit tu fais un groupement par ville(GROUP BY).
-avec group by

Code : Tout sélectionner

Select a.region, a.Ville, b.alarme, b.date, count(*) from toto a INNER JOIN tata b ON a.Ville=b.Ville GROUP BY a.region, a.Ville, b.alarme, b.date
-avec COUNT:

Code : Tout sélectionner

Select a.region, a.Ville, b.alarme, b.date, count(DISTINCT Toto.VILLE) from toto a INNER JOIN tata b ON a.Ville=b.Ville
l’inconvénient de la dernière requête c'est que tu n'auras qu'une seule ligne retournée.

Après j'avoue que ta modélisation n'est pas top car l'information sur la ville est dupliquée dans tes 2 tables.Une modélisation mieux pensée te donnerait les tables : region, ville, quartiers.

Re: Count avec jointure

Posté : 04 mars 2015, 15:54
par aly91
bonjour,
pour ignorer les duplicatas issus de ta requête, tu peux soit passer à la fonction COUNT l'instruction DISTINCT Toto.VILLE soit tu fais un groupement par ville(GROUP BY).
-avec group by

Code : Tout sélectionner

Select a.region, a.Ville, b.alarme, b.date, count(*) from toto a INNER JOIN tata b ON a.Ville=b.Ville GROUP BY a.region, a.Ville, b.alarme, b.date
-avec COUNT:

Code : Tout sélectionner

Select a.region, a.Ville, b.alarme, b.date, count(DISTINCT Toto.VILLE) from toto a INNER JOIN tata b ON a.Ville=b.Ville
l’inconvénient de la dernière requête c'est que tu n'auras qu'une seule ligne retournée.

Après j'avoue que ta modélisation n'est pas top car l'information sur la ville est dupliquée dans tes 2 tables.Une modélisation mieux pensée te donnerait les tables : region, ville, quartiers.
Merci de m'avoir répondu.
Alors moi je souhaiterais la première solution je veux voir les nombres d’occurrences de chaque ligne. Ce pendant, j'ai effectué la première solution j'ai toujours le même résultat ça ne change pas.Si non comme je vous dit j'utilise la table toto tout simplement pour pour rajouter l'information concernant la région.
Bien cordialement.

Re: Count avec jointure

Posté : 04 mars 2015, 16:28
par yann18
dans ce cas faudrait compter que les villes se trouvant dans la table tata tout y ignorant d'éventuels doublons

Code : Tout sélectionner

Select a.region, a.Ville, b.alarme, b.date, count(DISTINCT b.Ville) from toto a INNER JOIN tata b ON a.Ville=b.Ville GROUP BY a.region, a.Ville, b.alarme, b.date