[MySQL] question sur la fonction GROUP BY

Nanda Messages postés 21 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..
A voir également:

7 réponses

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
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
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
salut,

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

Alors utilise pluto un ORDER BY age
0
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
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

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

Posez votre question
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
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
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
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