J'ai une table nommée J'ai besoin de trouver le salaire maximal de chaque département avec l'ID de département donné et le nom de cette personne avec un salaire maximum. P> J'utilise la requête SQL suivante pour ce P> mais le code ci-dessus me donne une erreur:
Je suis capable d'obtenir facilement la table suivante avec cette requête ci-dessous: p> salaire code> contenant des salaires de l'employé dans divers départements:
dept_id doit être une expression globale ou apparaître dans le groupe par clause code> p>
dept_id name max_salary
12 e 500
13 f 600
14 d 400
4 Réponses :
Vous semblez apprendre à apprendre SQL, vous pouvez donc construire sur ce que vous avez. Ce qui suit obtient le salaire maximum: Vous pouvez l'utiliser comme sous-requête, pour obtenir tous les noms correspondants: P> select st.*
from SalaryTable st join
(select dept_id, max(salary) as max_salary
from SalaryTable
group by dept_id
) std
on st.dept_id = std.dept_id and
st.salary = std.max_salary
L'exigence est d'obtenir tous les employés et comme la déclaration de problème suggère d'obtenir uniquement les employés avec un salaire maximum.
Utilisez la sous-requête corrélée
select dept_id, name, salary from SalaryTable a where salary =(select max(salary) from SalaryTable b where a.dept_id=b.dept_id)
Pour être exact:
SELECT dept_id, NAME, salary FROM SalaryTable a WHERE salary =(SELECT MAX(salary) FROM SalaryTable b WHERE a.dept_id=b.dept_id) ORDER BY dept_id;
Vous pouvez le faire sans exister: Voir le Démo .
Résultats: P> > dept_id | name | salary
> ------: | :--- | -----:
> 12 | e | 500
> 13 | f | 600
> 14 | d | 400