Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels 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 03/05/2007, 14h50   #1
Membre du Club
 
Avatar de pseudobidon57
 
Inscription : octobre 2006
Messages : 133
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 133
Points : 65
Points : 65
Par défaut requete casse tete

Bonjour, je ceherche depuis un bon moment a résoudre la requete suivante, sans utiliser de curseur:
retourner les employee dont le salaire est superieure à la moyenne des salaires de leur departement. il y a 2 tables concernées:
la table employee qui contient les champs "employee_id", "salary", et la table department qui contient les champs "department_id" et "name"
j'ai essayé (entre autre) le code suivant:
Code :
1
2
3
4
5
6
7
SELECT employee_id
FROM employee
WHERE salary>
(SELECT e.employee_id, d.department_id, avg(e.salary)
FROM employee e, department d
WHERE d.department_id=e.department_id
GROUP BY e.employee_id, d.department_id);
qui forcement ne marche pas vu que dans la sous requete, je retourne trois colonnes, alor que ma première requete en retourne une seule..:s, mais, je ne vois pas comment faire autrement, et je ne pense pas etre très loin de la solution.. si quelqu'un avait une petite idée, cela m'aiderai beaucoup, merci
pseudobidon57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2007, 14h55   #2
Invité de passage
 
Inscription : novembre 2002
Messages : 6
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 6
Points : 3
Points : 3
Et en ajoutant un autre select ? ça donne quoi ?

Code :
1
2
3
4
5
6
7
8
SELECT employee_id
FROM employee
WHERE salary>
(SELECT AVERAGE FROM
(SELECT e.employee_id, d.department_id, avg(e.salary) AS AVERAGE
FROM employee e, department d
WHERE d.department_id=e.department_id
GROUP BY e.employee_id, d.department_id));
En fait je dis une énorme connerie, et comme je peux pas supprimer mon post...
fraisetagada est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2007, 15h02   #3
Membre du Club
 
Avatar de pseudobidon57
 
Inscription : octobre 2006
Messages : 133
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 133
Points : 65
Points : 65
lol.. non, cela ne fonctionne toujours pas, mais il y a de l'idée.. merci
pseudobidon57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2007, 15h10   #4
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Et cela :
Code :
1
2
3
4
5
6
7
SELECT employee_id
FROM employee e1
WHERE salary>
(SELECT avg(salary)
FROM employee
WHERE department_id=e1.department_id)
GROUP BY e.employee_id, d.department_id);
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2007, 15h11   #5
Invité de passage
 
Inscription : avril 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 6
Points : 4
Points : 4
J'ai l'impression qu'il manque quelque chose car la sous requete doit ramener plusieurs lignes ?
De plus, la moyenne des salaires est par département

si ç'est ça, peut-être que :
Code :
1
2
3
4
5
6
7
8
SELECT emp.employee_id
FROM employee emp
WHERE emp.salary>(SELECT AVERAGE FROM
                              (SELECT d.department_id, avg(e.salary) AS AVERAGE
                               FROM employee e, department d
                               WHERE d.department_id=e.department_id
                               GROUP BY d.department_id) calcul
                          WHERE calcul.department_id = emp.department_id);
seb00029 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2007, 15h22   #6
Membre du Club
 
Avatar de pseudobidon57
 
Inscription : octobre 2006
Messages : 133
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 133
Points : 65
Points : 65
oui parfaitement seb, la moyenne est par departement, c'etait mon principal souci, la requete fonctionne, genial!! Je vais juste verifier que les resultats soient juste, mais cela m'en a tout l'air.. Merci beaucoup..
pseudobidon57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h01.


 
 
 
 
Partenaires

Hébergement Web