[MySQL] question sur la fonction GROUP BY

Slt à tous,

Pour aller droit au but, voici ma question:
Lorsqu'on fait un GROUP BY en SQL (j'utilise MySQL), est-il possible de recuperer les groupes que SQL a fait?

exemple : Pour une table
NOM Age
A 11
B 23
C 11
D 36

Si je demnde un GROUP BY Age, il me rend
11 A
23 B
36 D

Cependant Comme il a deja fait les groupes ca serait interessant de plutot obtenir quelque chose du style
11 A-->C
23 B
36 D

... Est ce possible ???
Merci..
Configuration: Windows XP
Firefox 1.5.0.11

7 réponses

  1. Hello,

    en Mysql c'est possible en écrivant :
    select Age, GROUP_CONCAT(Nom) from A GROUP BY Age;

    Si j'ai bien compris ta question...
    1
    1. Bonjour,
      j'ai un problème d'affichage d'enregistrement dans l'état se sortie access
      par exemple:
      j'ai un tableau access:

      nom reference
      ali 100
      ali 103
      ali 200
      moh 050
      moh 090
      moh 102
      selma 012
      selma 090
      yanis 080
      je veux avoir ce resultat dans l'etat de sortie :
      ali ..................... 100-103-200
      moh .................. 050-090-102
      selma ................ 012-090
      yanis ................. 080
      j'atends votre repence ....merci repense
      1
    2. Salut,

      normalement, ca doit renvoyer
      11 A
      11 C
      23 B
      36 D

      mais bizzarrement, Mysql supprime le second key 11, d'ou pblm.
      Quelqu'un a une idée? du prq et aussi et surtout du comment faire pour avoir le resultat complet.

      Merci
      0
      1. si tu veux obtenir
        11 A
        11 C
        23 B
        36 D

        Alors utilise pluto un ORDER BY age
        0
    3. A Reivax962 "MySQL a étendu l'utilisation de la clause GROUP BY. Vous pouvez utiliser des colonnes ou des calculs de l'expression SELECT qui n'apparaissent pas dans la clause GROUP BY"
      cf documentation MySQL http://dev.mysql.com/doc/refman/5.0/fr/group-by-hidden-fields.html

      Cordialement,
      angelsmatt
      0
      1. Ben oui, je sais bien !
        Mais c'est spécifique au sgbd mysql et aucunement au langage sql.
        Et c'est d'ailleurs fonctionnellement plutôt génant, parce que si certaines valeurs des colonnes que l'on rajoute changent selon les enregistrements regroupés, laquelle sera affichée ?
        0
    4. ma question est de savoir si avant d'utiliser GROUP BY X je suis forcé de sélectionner X comme attribut au niveau du sélect.
      doi je faire?

      exemple:sélect X
      .
      .
      .
      GROUP BY X

      ou je pe faire

      sélect Y,Z,W
      .
      .
      .

      GROUP BY X
      0
      1. Bonjour,
        MySQL permet de faire un select y,z,w [...]

        Je précise bien mysql, parce qu'avec MSSql, Oracle et d'autres, ce n'est pas possible.
        En effet, il se pose le problème de quels valeurs sélectionner.
        Imagine deux lignes dont les champs sont :

        X | Y | Z
        X | Y | Z'

        Si tu fais
        SELECT Y, Z from table group by X

        Pour Y, pas de problème, c'est le même dans les deux cas. Donc il te reverra celui-là.
        Mais pour Z, doit-il renvoyer Z ou Z' ?
        Il me semble que MySQL renvoie le premier qu'il trouve.
        Mais il y a une ambigüité, c'est la raison pour laquelle la plupart des SGBD refusent une telle instruction.

        De façon plus générale, les GROUP BY sont censés être utilisés avec des fonctions d'agrégation : MAX, MIN, COUNT, etc.

        Voilà :)

        Xavier
        -1
    5. Contributeur
      salut,

      pour le résultat, il ne te renvoie pas
      11 A
      11 C
      23 B
      36 D
      plutôt ?

      c'est ce qu'il sensé faire me semble-t-il.
      -1
      1. Non justement, group by X n'a AUCUNE raison de renvoyer deux champs X ayant la même valeur. Il est faux de dire que "normalement il est censé le faire".

        En fait, normalement, il ne devrait même pas accepter cette requête car le champ Nom ne fait pas partie de la clause group by.

        Pour obtenir

        11 A
        11 C
        23 B
        36 D

        en gardant group by, il faut plutôt faire group by age, nom.

        Sous sql server et d'autres, select * from table group by age ne fonctionnerait pas : il faudrait mettre uniquement select age from table group by age (ou rajouter des fonctions d'aggrégation, comme count(), sum(), min(), etc. )
        -1