Získání prvních 100 zaměstnanců ve firmě
Nejprve si dejte pozor na případy nerozhodného výsledku, které jsou zahrnuty ve výsledcích obou níže uvedených dotazů. např. i když máte zaměstnance se stejným datem přijetí, jsou zahrnuti v seznamech, což znamená, že seznamy mají alespoň 100 lidí.
Pokud je verze vaší databáze 12c-
, pak musíte použít dílčí dotaz, ve kterém vrátíte výsledek dense_rank()
funkce :
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;
Pokud je verze vaší databáze 12c+
, pak nemusíte kvůli fetch
používat poddotaz klauzule :
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;
Pro váš případ věnujte pozornost použití partition by
klauzule je chybná a měla by být odstraněna v rámci dense_rank()
výraz funkce a pořadí dat pronájmu by nemělo být sestupné, ale vzestupné.
Ukázka pro 10 nejlepších zaměstnanců