Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Verwenden Sie TOP oder Rank, wenn Sie die ersten paar oder die meisten Beobachtungen finden

Um die ersten 100 Mitarbeiter in der Firma einzustellen

Zuallererst:Seien Sie vorsichtig mit den Unentschieden-Fällen, die in den Ergebnissen beider Abfragen unten enthalten sind. z.B. Selbst wenn Sie Mitarbeiter mit demselben Einstellungsdatum haben, werden sie in die Listen aufgenommen, was bedeutet, dass Listen mindestens 100 Personen enthalten.

Wenn Ihre Datenbankversion 12c- ist , dann müssen Sie eine Unterabfrage verwenden, in der das Ergebnis von dense_rank() zurückgegeben wird Funktion :

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;

Wenn Ihre Datenbankversion 12c+ ist , dann brauchen Sie wegen fetch keine Unterabfrage zu verwenden Klausel :

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;

Beachten Sie für Ihren Fall, dass Sie partition by verwenden -Klausel ist falsch und sollte innerhalb von dense_rank() entfernt werden Der Ausdruck der Funktion und die Reihenfolge der Einstellungsdaten sollten nicht absteigend, sondern aufsteigend sein.

Demo für Top-10-Mitarbeiter