Oracle
 sql >> Base de données >  >> RDS >> Oracle

Utilisez TOP ou Rank pour trouver les premières ou le plus grand nombre d'observations

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