За да наемете първите 100 души във фирмата
Първо, внимавайте за случаите на равенство, включени в резултатите от двете заявки по-долу. напр. дори ако имате служител с еднаква дата на наемане, те са включени в списъците, което означава, че списъците съдържат поне 100 души.
Ако вашата база данни е 12c-
, тогава трябва да използвате подзаявка, в която да върнете резултата от dense_rank()
функция :
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;
Ако вашата база данни е 12c+
, тогава не е необходимо да използвате подзаявка заради fetch
клауза :
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;
Обърнете внимание за вашия случай, че използвате partition by
клаузата е грешна и трябва да бъде премахната в dense_rank()
изразът на функцията и редът на датите на наемане не трябва да са низходящи, а възходящи.
Демо за най-добри 10 служители