Prob group by sql

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.
Configuration: Windows Vista
Internet Explorer 7.0

5 réponses

  1. Modérateur
    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.
    1. 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à !!!
      1. 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 !!!
        1. Modérateur
          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
          1. 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)
        2. 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