2010-12-11 15 views
0

T1: employé [id, salaire]Inner Join: Est-ce une solution optimale?

T2: département [nom, employeeid] (employeeid est une clé étrangère à l'id T1)

Problème: Ecrire une requête pour aller chercher le nom du département qui reçoit le salaire maximum.

Ma solution:

SELECT DISTINCT name 
FROM department AS a 
INNER JOIN employee AS b ON a.employeeid = b.id 
AND b.salary 
IN ( 
    SELECT max(salary) 
    FROM employee AS c 
) 

Edit: L'énoncé du problème est exact, et nous ne sommes pas essayer de trouver l'employé qui a le salaire le plus élevé. Il est dit ".... Département qui reçoit .....", pas "... employé qui reçoit ...".

Est-ce correct? Ou cela peut-il être optimisé?

+1

Quelle base de données et la version que vous utilisez? –

+1

Êtes-vous censé trouver un département dans lequel travaille l'employé avec le salaire maximum, ou le département dont les membres ont la somme maximum des salaires? Parce que votre code en dit un, et votre texte l'autre. –

+2

Et, est-ce un devoir? –

Répondre

3

GROUPE PAR le nom du département et ordre par SUM (salaire).

SELECT department.name 
FROM department 
JOIN employee ON department.employeeid = employee.id 
GROUP BY department.name 
ORDER BY SUM(salary) DESC 
LIMIT 1 
+0

Non, la question voulait dire ce que vous avez d'abord interprété: Un département a plusieurs employés. Nous essayons donc de savoir quel ministère a le montant le plus élevé de liquidités, c.-à-d., Si vous additionnez tous les salaires de tous les employés de CHAQUE département, alors quel ministère a le salaire le plus élevé? –

+0

Nice, un bon aperçu de celui-ci aussi! –

+0

Cette requête doit renvoyer une liste des départements avec une somme des salaires des employés ** dans ce département **. Avec les clauses order by et limit, il ne restituera que le département avec le salaire total le plus élevé, ce qui me semble être la réponse à la question initiale. – skajfes

0

Que diriez-vous:

SELECT employee.id, employee.salary, department.name 
FROM department, employee 
where 
employee.id = department.employeeid and 
employee.salary = (select max(salary) from employee) 
+0

Cela va certainement courir plus vite. – Arc

+0

Veuillez voir la structure de la table. Avec tout le respect dû à votre effort, la requête ne correspond pas encore (noms de colonne). –

+0

@JavaMental, essayez maintenant –