0
votes

Sélectionner les employés des départements avec un salaire moyen inférieur à

Je dois écrire une requête qui retourne tous les employés des départements avec un salaire moyen inférieur à 12 000. J'ai écrit cette requête

SELECT DEPARTMENT_ID, FIRST_NAME, LAST_NAME
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID,FIRST_NAME,LAST_NAME
HAVING AVG(SALARY) < 12000
ORDER BY LAST_NAME ASC;


1 commentaires

Vous devez calculer la moyenne pour chaque département, séparé des noms.


4 Réponses :


0
votes

Vous avez besoin de sous-requête:

SELECT e.DEPARTMENT_ID, e.FIRST_NAME, e.LAST_NAME
FROM EMPLOYEES e
WHERE e.DEPARTMENT_ID IN (SELECT e1.DEPARTMENT_ID
                          FROM EMPLOYEES e1
                          GROUP BY e1.DEPARTMENT_ID
                          HAVING AVG(e1.SALARY) < 12000
                         )
ORDER BY e.LAST_NAME ASC;


0 commentaires

1
votes

Vous avez besoin du salaire moyen du département. J'utiliserais une fonction de fenêtre: xxx


2 commentaires

Oh d'accord, je vais lire des fonctions de fenêtre. Pourriez-vous seulement me dire que signifie "e"? Est-ce une sorte de variable?


E est un alias de table. Je vous recommande vivement de rechercher des alias de table et de colonne, si vous n'êtes pas familier avec eux.



0
votes

Vous pouvez utiliser la sous-requête corrélée

SELECT e.DEPARTMENT_ID, e.FIRST_NAME, e.LAST_NAME
FROM EMPLOYEES a
WHERE exists (SELECT 1 FROM EMPLOYEES b
                          where a.department_id=b.department_id
                          HAVING AVG(b.SALARY) < 12000
                         );


0 commentaires

0
votes

Essayez-le ..

SELECT e.DEPARTMENT_ID, e.FIRST_NAME, e.LAST_NAME
       from employee e where e.DEPARTMENT_ID in 
                                   (select e.DEPARTMENT_ID from employee e 
                                                  group by e.DEPARTMENT_ID
                                                   having avg(salary)<3000)


1 commentaires

S'il vous plaît, expliquez ce qu'il a mal fait et pourquoi cette solution fonctionne. Cela l'aidera à comprendre ce qui se passe et pourrait empêcher la même erreur à l'avenir.