[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 -
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..
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:
- [MySQL] question sur la fonction GROUP BY
- Fonction si et - Guide
- Comment créer un groupe sur whatsapp - Guide
- Message bounced by administrator - Forum Mail
- Gd group - Forum Vos droits sur internet
- Mysql community download - Télécharger - Bases de données
7 réponses
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...
en Mysql c'est possible en écrivant :
select Age, GROUP_CONCAT(Nom) from A GROUP BY Age;
Si j'ai bien compris ta question...
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
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
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
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
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
cf documentation MySQL http://dev.mysql.com/doc/refman/5.0/fr/group-by-hidden-fields.html
Cordialement,
angelsmatt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
doi je faire?
exemple:sélect X
.
.
.
GROUP BY X
ou je pe faire
sélect Y,Z,W
.
.
.
GROUP BY X
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
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
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.
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.
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. )
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. )