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 09/05/2008, 17h43   #1
Futur Membre du Club
 
Inscription : avril 2006
Messages : 65
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 65
Points : 18
Points : 18
Par défaut Select / Group by / Having

Bonjour,

J'essaie de monter une requête qui me ramene trois champs et j'aimerai faire un having sur l'un d'entre eux. Je n'y arrive pas, je vous montre un exemple pour être plus clair.

Voici ma requête qui me ramène les éléments le bon nombre d'occurence
Code :
1
2
3
4
5
6
 
SELECT a.chmp1, b.chmp2
FROM a.a, b.b
WHERE ...
GROUP BY a.chmp1, b.champ2 
HAVING count(b.champ2) > 1
Ca marche très bien jusqu'au moment ou je veux rajouter une colonne. Car cet ajout fait que je perd énormement d'occurence du fait qui me fait une agrégation sur ce troisième champ
Code :
1
2
3
4
5
6
 
SELECT a.chmp1, b.chmp2, c.chmp3
FROM a.a, b.b
WHERE ...
GROUP BY a.chmp1, b.champ2, c.chmp3 
HAVING count(b.champ2) > 1
Lorsque je rajoute ce troisieme champ je suis obligé de le rajouter dnas mon group by mais du coup il me fait un tri sur ce champ alors que je veux uniquement le ramener a titre d'informations.

Si ce n'est pas clair n'hésitez pas a me demandé.
jnauche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2008, 10h38   #2
Membre du Club
 
Inscription : décembre 2005
Messages : 41
Détails du profil
Informations personnelles :
Âge : 41
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : décembre 2005
Messages : 41
Points : 46
Points : 46
si le champ que tu ajoute est une information unique pour la clé (a.chmp1, b.chmp2) alors tu peux ajouter ton champ avec une fonction de regroupement tel que SELECT a.chmp1, b.chmp2, max(c.chmp3)
Gweanel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2008, 14h44   #3
Membre confirmé
 
Avatar de JerryMouse
 
Homme N'Guessan KOUAME
Inscription : avril 2002
Messages : 210
Détails du profil
Informations personnelles :
Nom : Homme N'Guessan KOUAME
Localisation : Côte d'Ivoire

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2002
Messages : 210
Points : 270
Points : 270
Envoyer un message via MSN à JerryMouse Envoyer un message via Yahoo à JerryMouse
le problème avec ta requete est que avec ton
Code :
GROUP BY Champ1,Champ2,Champ3
, Il existe plusieurs occurances de Champ3 pour une occurance de Champ2.
Il te faut juste permuter les champs 2 et 3
Code :
GROUP BY Champ1,Champ3,Champ2
__________________
Très souvent, le plus difficile est de savoir ce que l'on veut.
JerryMouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2008, 11h09   #4
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
Citation:
Envoyé par N'Guessan Voir le message
Code :
GROUP BY Champ1,Champ2,Champ3
Code :
GROUP BY Champ1,Champ3,Champ2
Ca c'est equivalent... l'ordre du group by n'a aucune importance. Si tu veux trier, utilise order by!

Code :
1
2
3
 
SELECT a.chmp1, b.chmp2, c.chmp3
FROM a.a, b.b
comments détermines-tu quel chmp3 employer?


si tu as <a1;b2;c30> et <a1;b2;c31>, alors <a1;b1> parait ok pour un group by a,b, mais quel c cherches-tu ? le c30, c31, les 2?
__________________
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 16h07.


 
 
 
 
Partenaires

Hébergement Web