Pour obtenir les 100 premières personnes embauchées dans l'entreprise
Tout d'abord, faites attention aux cas d'égalité qui sont inclus dans les résultats des deux requêtes ci-dessous. par exemple. même si vous avez des employés avec la même date d'embauche, ils sont inclus dans les listes, ce qui signifie que les listes comptent au moins 100 personnes.
Si la version de votre base de données est 12c-
, alors vous devez utiliser une sous-requête dans laquelle renvoyer le résultat de dense_rank()
fonction :
select department_name, department_id, first_name, hire_date, salary
from
(
select d.department_name, d.department_id, e.first_name, e.hire_date, e.salary,
dense_rank() over ( order by hire_date ) as e_rank_hire
from Dtable_department d
join Etable_employee e
on e.department_id = d.department_id
)
where e_rank_hire <= 100
order by e_rank_hire;
Si la version de votre base de données est 12c+
, alors vous n'avez pas besoin d'utiliser une sous-requête par souci de fetch
clause :
select d.department_name, d.department_id, e.first_name, e.hire_date, e.salary
from Dtable_department d
join Etable_employee e
on e.department_id = d.department_id
order by hire_date
fetch first 100 rows with ties;
Faites attention à votre cas qui utilise partition by
la clause est erronée et doit être supprimée dans le dense_rank()
l'expression de la fonction et l'ordre des dates d'embauche ne doit pas être décroissant mais croissant.
Démo pour les 10 meilleurs employés