Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/12/2007, 10h54   #1
Membre à l'essai
 
Inscription : avril 2005
Messages : 200
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 200
Points : 24
Points : 24
Par défaut Group by sous Oracle

Slt à tous,
j'utilise un group by dans ma requête (car j'utilise SUM):
Code :
1
2
3
SELECT colA,colB,colC,colD,colE,SUM(colF)
FROM TABLE
GROUP BY colA,colB,colC,colD,colE
or je souhaite grouper seulement sur la colonne colA mais le group by veut absolument toute les colonnes sinon il me sort "Not a Group By expression"!!
Auriez vous une idéé please
Merci d'avance
zizou771 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 11h14   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
regarde du coté des fonctions analytiques
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 15h15   #3
Membre à l'essai
 
Inscription : avril 2005
Messages : 200
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 200
Points : 24
Points : 24
ah ouais c génial j'connaissais pas
un simple over(partition by...) suffit!!
merci
zizou771 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2007, 14h49   #4
Membre à l'essai
 
Inscription : avril 2005
Messages : 200
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 200
Points : 24
Points : 24
je reviens sur ce sujet.
Le over(partition by...) marche bien mais...il ne regroupe pas les résultats comme un "Group By".
Je m'explique:

si j'ai 2 lignes ayant les memes colonnes colA,colB,colC,colD,colE alors avec le over(partition by...) j'obtient 2 lignes au lieu d'une.

over(partition by...) ->
colA,colB,colC,colD,colE, colF1+colF2
colA,colB,colC,colD,colE, colF1+colF2

comment obtenir qu'un seul ligne?je ne trouve pas
zizou771 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2007, 16h35   #5
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Citation:
Envoyé par zizou771 Voir le message
je reviens sur ce sujet.
Le over(partition by...) marche bien mais...il ne regroupe pas les résultats comme un "Group By".
Je m'explique:

si j'ai 2 lignes ayant les memes colonnes colA,colB,colC,colD,colE alors avec le over(partition by...) j'obtient 2 lignes au lieu d'une.

over(partition by...) ->
colA,colB,colC,colD,colE, colF1+colF2
colA,colB,colC,colD,colE, colF1+colF2

comment obtenir qu'un seul ligne?je ne trouve pas
Il y a un petit problème à éclaircir ...
Tu veux une seule ligne à la place de deux mais laquelle si ce ne sont pas les mêmes valeurs pour les colonnes autre que colA?
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2007, 17h58   #6
Membre à l'essai
 
Inscription : avril 2005
Messages : 200
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 200
Points : 24
Points : 24
je précise:

j'ai les 2 lignes suivante dans ma table:
colA,colB,colC,colD,colE, colF1
colA,colB,colC,colD,colE, colF2

Elles se diffère que par la colonne colF.
C'est justement celle-ci que je SUM.
Les autres colonnes sont identique.
Suite au over(partition by colA) j'obtient 2 lignes identique
colA,colB,colC,colD,colE, colF1+colF2
colA,colB,colC,colD,colE, colF1+colF2

alors que j'en veux qu'une: colA,colB,colC,colD,colE, colF1+colF2

Si les autres colonne colA,colB,colC,colD,colE était différente je comprendrais qu'il me sorte 2 lignes mais dans mon cas les 2 lignes ont les même colonne colA,colB,colC,colD,colE.

C un peu + clair?

en fait pour résoudre le problème temporairement j'ai fait un SUM simple avec un group by colA,colB,colC,colD,colE.
zizou771 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2007, 18h29   #7
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Alors ma question est la suivante indépendamment du cas de ces deux lignes :

Y a-t-il des lignes ou colA a la même valeur mais les autres colonnes ont des valeurs différentes?

En tout cas, contrairement à l'utilisation de GROUP BY, les fonctions analytiques ne changent pas le nombre de lignes du résultat. En fait, la fonction analytique est calculée pour chaque ligne du résultat
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2008, 15h49   #8
Membre à l'essai
 
Inscription : avril 2005
Messages : 200
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 200
Points : 24
Points : 24
lorsque j'ai le même colA alors colA,colB,colC,colD,colE sont les même! seul colF est différent.
Et comme tu le dis, la fonction analytique est calculée pour chaque ligne du résultat c ca qui est dommage dans mon cas...
zizou771 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2008, 20h01   #9
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Citation:
Envoyé par zizou771 Voir le message
lorsque j'ai le même colA alors colA,colB,colC,colD,colE sont les même! seul colF est différent.
Et comme tu le dis, la fonction analytique est calculée pour chaque ligne du résultat c ca qui est dommage dans mon cas...
Alors GROUP BY sur les colonnes concernées ensemble est bien valable pour toi ...
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 22h43   #10
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
Code :
1
2
3
4
5
6
7
8
9
SELECT 
  colA,
  max(colB) keep (dense_rank first ORDER BY colf,colb,colc,cold,cole),
  max(colc) keep (dense_rank first ORDER BY colf,colb,colc,cold,cole),
  max(cold) keep (dense_rank first ORDER BY colf,colb,colc,cold,cole),
  max(cole) keep (dense_rank first ORDER BY colf,colb,colc,cold,cole),
  SUM(colF)
FROM TABLE
GROUP BY colA
ça devrait te mettre sur la voie...
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 23h30   #11
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Citation:
Envoyé par laurentschneider Voir le message
Code :
1
2
3
4
5
6
7
8
9
SELECT 
  colA,
  max(colB) keep (dense_rank first ORDER BY colf,colb,colc,cold,cole),
  max(colc) keep (dense_rank first ORDER BY colf,colb,colc,cold,cole),
  max(cold) keep (dense_rank first ORDER BY colf,colb,colc,cold,cole),
  max(cole) keep (dense_rank first ORDER BY colf,colb,colc,cold,cole),
  SUM(colF)
FROM TABLE
GROUP BY colA
ça devrait te mettre sur la voie...
Bonjour Laurent,

Si ColA détermine les valeurs des autres colonnes sauf ColF alors je ne vois pas pourquoi ne pas faire tout simplement un GROUB BY sur l'ensemble des colonnes!
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2008, 00h01   #12
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
Oui, bien sûr. C'est pour ça que j'ai dit que c'était une piste, mais effectivement GROUP BY A,B,C,D,E est peut-être la meilleure solution. En tout cas ce n'est pas la même
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h50.


 
 
 
 
Partenaires

Hébergement Web