Aby zatrudnić pierwszych 100 osób w firmie
Przede wszystkim uważaj, aby przypadki remisowe były uwzględnione w wynikach obu zapytań poniżej. np. nawet jeśli masz pracownika z taką samą datą zatrudnienia, są oni uwzględnieni na listach, co oznacza, że listy obejmują co najmniej 100 osób.
Jeśli twoja wersja bazy danych to 12c-
, musisz użyć podzapytania, w którym zwrócisz wynik dense_rank()
funkcja :
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;
Jeśli Twoja wersja bazy danych to 12c+
, nie musisz używać podzapytania ze względu na fetch
klauzula :
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;
Zwróć uwagę na to, że używasz partition by
klauzula jest błędna i powinna zostać usunięta w dense_rank()
wyrażenie funkcji, a kolejność dat zatrudnienia nie powinna być malejąca, ale rosnąca.
Demo dla 10 najlepszych pracowników