|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() Inscription : avril 2005 Messages : 33 ![]() |
Bonjour à tous ,
Est-il possible de faire un select * avec une clause group by ? Comme par exemple : Ou doit-on spécifier tous les champs dans le Select ? Cordialement. |
|
|
00
|
|
|
#2 |
|
Membre éprouvé
![]() Inscription : juillet 2006 Messages : 445 ![]() |
Bonjour,
Le problème n'est pas dans le select mais dans le group by, qui va vous demander plus de colonnes, selon les données de la table. Pourquoi ne pas tout simplement faire un "distinct" ? |
|
|
00
|
|
|
#3 |
|
Futur Membre du Club
![]() Inscription : avril 2005 Messages : 33 ![]() |
Si j'utilise distinct je suis obligé d'écrire tous les champs dans ma requête comme par exemple :
Code :
SELECT DISTINCT Champ1, Champ2 ... champN |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Salut !
Qu'essaies-tu d'obtenir ? GROUP BY te permet de définir des groupes selon un certain critère (égalité sur champ1), afin de pouvoir appliquer des fonctions d'aggrégat sur ce groupe. => une seule ligne t'es retournée par valeur possible de champ1 Si tu demandes le champ2, quelle valeur va-t-on bien pouvoir te retourner, vu que ce n'est pas la même pour toutes les lignes du groupe ? Si ce que tu veux, c'est obtenir les résultats d'agrégats reportés sur chaque ligne, essaie les fonction analytiques : OVER(PARTITION BY champ1)
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
|
00
|
|
|
#5 |
|
Membre éprouvé
![]() Inscription : juillet 2006 Messages : 445 ![]() |
|
|
|
00
|
|
|
#6 | |
|
Futur Membre du Club
![]() Inscription : avril 2005 Messages : 33 ![]() |
Citation:
Je ne sais pas si j'ai été bien clair ![]() Par contre je ne connais pas du tout les fonctions analytiques ... |
|
|
|
00
|
|
|
#7 | ||
|
Membre éprouvé
![]() Inscription : juillet 2006 Messages : 445 ![]() |
De toutes manières avec les fonctions analytiques vous allez devoir traiter chaque champ.
Peut-être l'utilisation du rownum peut vous être utile : Code :
|
||
|
|
00
|
|
|
#8 |
|
Futur Membre du Club
![]() Inscription : avril 2005 Messages : 33 ![]() |
Merci pour vos bonnes idées
|
|
|
00
|
|
|
#9 |
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 523 ![]() |
Par principe, ce n'est jamais une bonne idée de faire un select * et ça ne coûte pas plus cher d'écrire tous les champs, même si ça peut faire lourd.
Une modification de ta table et ta requète peut te renvoyer des résultats bizarres. Et pour trouver la source de ce genre d'erreurs, c'est plutôt chronophage. |
|
|
00
|
|
|
#10 | |||||
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
Citation:
Bon, tu auras quand même "rownum" dans la sélection. Donc, le * ne fonctionne pas, il te faudrait un "* mais pas rownum". Aussi tu t'es pas sur que le rownum de T1 corresponde au rownum de Table1, suivant le plan rownum pourrait ne pas correspondre aux même lignes. Pour éviter ceci j'utiliserais donc Code :
|
|||||
|
00
|
|
|
#11 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
Tout à faire d'accord, ce n'est en principe pas une bonne idée, surtout quand on fait ça par paresse
|
|
00
|
|
|
#12 |
|
Membre éprouvé
![]() Inscription : juillet 2006 Messages : 445 ![]() |
Arghh, je te crois sur parole et mes noms d'alias étaient maladroits, mais je pensais que le fait de "pré-sélectionner" mes rownums comme je l'ai fait dans les deux sous-requêtes me mettrait à l'abri du problème.
|
|
|
00
|
|
|
#13 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
bon, je vois, il va falloir te trouver une démo ...
excuse-moi si c'est un peu brouillon, c'était pas si simple de trouver un cas où ca ne marche pas. Code :
|
||
|
00
|
|
|
#14 |
|
Membre éprouvé
![]() Inscription : juillet 2006 Messages : 445 ![]() |
Ok je vois mieux le problème, effectivement c'est un peu difficile à reproduire mais le problème est bien là, donc méthode à éviter.
Merci beaucoup pour la démo ! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com