Prob group by sql

Fermé
Breizher - 4 juin 2008 à 11:05
lina012 Messages postés 51 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 21 juillet 2008 - 4 juin 2008 à 12:14
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 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
4 juin 2008 à 11:09
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 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 21 juillet 2008
4 juin 2008 à 11:23
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
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 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
4 juin 2008 à 11:55
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 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 21 juillet 2008
4 juin 2008 à 12:14
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 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 21 juillet 2008
4 juin 2008 à 11:58
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