2014-06-10 5 views
1

rejoint Problème: Créer une liste des noms de service, l'ID du gestionnaire, nom du gestionnaire (employé nom) de ce département, et le salaire moyen dans chaque département .fonctions de groupe SQL en utilisant

SELECT d.department_name, d.manager_id, AVG(e.salary) 
FROM employees e 
INNER JOIN departments d ON (e.department_id = d.department_id) 
GROUP BY d.department_name, d.manager_id; 

Et ça marche bien, mais quand j'ajoute le e.last_name, je reçois tous les noms de famille de la table des employés.

Je crois que la réponse à être ici et pas très loin, bien que hors de ma portée à ce stade.

+0

Tous les noms sont ceux que vous sélectionnez par e.last_name. Pourriez-vous s'il vous plaît donner quelques conseils sur ce à quoi ressemblent vos données/tableaux? –

+0

Merci Linger, vous avez raison :) – Novice

Répondre

2

Afin de tirer le nom du gestionnaire, vous devez joindre à nouveau employees, cette fois-ci sur d.manager_id:

SELECT d.department_name, d.manager_id, m.name, AVG(e.salary) 
FROM employees e 
INNER JOIN departments d ON (e.department_id = d.department_id) 
LEFT OUTER JOIN employees m ON (m.employee_id = d.manager_id) 
GROUP BY d.department_name, d.manager_id, m.name; 

Le type de jointure (interne ou externe) n'est pas essentiel ici, parce que vous regroupez par d.manager_id.

2

Il semble que vous devez joindre d.manager_id-employees nouveau pour obtenir les gestionnaires last_name:

SELECT d.department_name, d.manager_id, e2.last_name, AVG(e.salary) 
FROM employees e 
INNER JOIN departments d ON e.department_id = d.department_id 
INNER JOIN employees e2 ON d.manager_id = e2.employee_id 
GROUP BY d.department_name, d.manager_id, e2.last_name 
+0

Ne pensez-vous pas qu'il s'agit plus d'ajouter au groupe par l'expression que de se joindre une fois de plus? – cy3er

+0

Non, d'après ce que j'ai compris, l'OP voulait le nom de famille du Manager. Pour l'obtenir, vous devrez relier à la table des employés à nouveau. Le simple fait d'utiliser 'e.last_name' vous donnerait le nom de famille de chaque employé. – Linger

Questions connexes