Om de eerste 100 mensen aangenomen te krijgen voor het bedrijf
Allereerst, wees voorzichtig met de gelijkspelgevallen die zijn opgenomen in de resultaten van beide onderstaande vragen. bijv. zelfs als je een werknemer hebt met dezelfde aanstellingsdatum, worden ze opgenomen in de lijsten, wat betekent dat lijsten minstens 100 mensen hebben.
Als uw databaseversie 12c-
. is , dan moet je een subquery gebruiken om het resultaat van dense_rank()
te retourneren functie :
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;
Als uw databaseversie 12c+
. is , dan hoeft u geen subquery te gebruiken omwille van fetch
clausule :
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;
Let op voor uw geval dat het gebruik van partition by
clausule is verkeerd en moet worden verwijderd binnen de dense_rank()
uitdrukking van de functie en de volgorde van indienstnemingsdatums mogen niet aflopend maar oplopend zijn.