Prob group by sql

Breizher -  
lina012 Messages postés 51 Statut Membre -
Bonjour a tous.
Voila mon probleme, ma requete ne fonctionne pas corretement, quand j'utilise un group by dans la requete:

#Avec Group By :

SELECT * FROM t_appartenir a, t_contact c, t_ville v, t_typecontact t WHERE a.codecontact=c.codecontact AND c.ville=v.codeville AND c.typecontact=t.codetypecontact AND codegroupe='25' GROUP BY c.ville

elle me fournit le resultat suivant:

AUDIERNE 29770 SAINTE ANNE ---------
BREST 29287 SAINT JEAN BAPTISTE ---------------

#Sans le Group By :

SELECT * FROM t_appartenir a, t_contact c, t_ville v, t_typecontact t WHERE a.codecontact=c.codecontact AND c.ville=v.codeville AND c.typecontact=t.codetypecontact AND codegroupe='25'

elle me fournit le resultat suivant:

BREST 29287 SAINT JEAN BAPTISTE
BREST 29287 SAINT ANDRE
AUDIERNE 29770 SAINTE ANNE

Je ne comprend plus rien le group by fait une sorte de distinct.

5 réponses

sebsauvage Messages postés 33415 Statut Modérateur 15 667
 
Déjà, SELECT *, oublie.
On ne doit jamais faire de SELECT *

Ensuite, group by implique qu'il y a quelquechose à calculer (SUM, AVG, COUNT...).
Or dans ton SELECT, il n'y a aucune fonction de calcul.
0
lina012 Messages postés 51 Statut Membre
 
SELECT (tes champs) FROM t_appartenir a, t_contact c, t_ville v, t_typecontact t WHERE a.codecontact=c.codecontact AND c.ville=v.codeville AND c.typecontact=t.codetypecontact AND codegroupe='25' GROUP BY c.ville, v.codeville

ca t'affichera normalement tes résultats groupés par ville et le fait de rajouter le code ville obligera à tt afficher y compris les doublons.

et puis il a raison il ne faut jamais grouper sur le *

je ne sais pas si c'est la meilleure solution à adopter , mais bon voilà voilà !!!
0
Breizher
 
Merci pour vos reponces mais toujour rien a faire

requete modifier:

SELECT a.codecontact, nom, adresse, v.ville, cp, tel, teldirecteur, mail FROM t_appartenir a, t_contact c, t_ville v WHERE a.codecontact=c.codecontact AND c.ville=v.codeville AND codegroupe='25' GROUP BY c.ville, v.codeville;

#et toujour le mais resultat:

AUDIERNE 29770 SAINTE ANNE ---------
BREST 29287 SAINT JEAN BAPTISTE ---------------

C 'est la deuxième requete ki ma poser probleme dans mon projet !!!
0
sebsauvage Messages postés 33415 Statut Modérateur 15 667
 
Le GROUP BY ne sert à rien si tu n'utilise pas de fonction de calcul (COUNT, SUM, AVG...)
Voir https://sqlpro.developpez.com/cours/sqlaz/ensembles/#L1
0
lina012 Messages postés 51 Statut Membre
 
oui c vrai que c'est pas top de l'utiliser si on n'a rien à calculer mais là, ca fait l'affaire puisque ça rend le résultat trié par le nom de la ville , en tout cas chez moi ça marche (ormis le fait que ça n'a pas trop d'utilité comme tu as dis)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lina012 Messages postés 51 Statut Membre
 
c bizarre , mais chez moi, ça marche nikel, et pourtant j'ai pas mal de doublons !!!

essaie encore ça!!!

SELECT nom, adresse, v.ville,a.codecontact, cp, tel, teldirecteur, mail, a.codeville FROM t_appartenir a, t_contact c, t_ville v WHERE a.codecontact=c.codecontact AND c.ville=v.codeville AND codegroupe='25' GROUP BY v.ville, nom, adresse, a.codeville,cp, tel, teldirecteur, mail, a.codecontact

(regarde si tt ce que tu as dans le group by fait partie du select)

de tte facon ça groupe par ville
0