[MySQL] question sur la fonction GROUP BY

Nanda Messages postés 21 Date d'inscription   Statut Membre -  
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   -
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. Stef
     
    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
  2. N@TALI
     
    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
    1. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
       
      salut,

      ouvre un fil dans le forum approprié, merci !
      0
  3. gisa mainty
     
    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. rachid
       
      si tu veux obtenir
      11 A
      11 C
      23 B
      36 D

      Alors utilise pluto un ORDER BY age
      0
  4. angelsmatt
     
    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. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. tita
     
    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. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      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
  7. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
     
    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
  8. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    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