At få de første 100 personer ansat i firmaet
Først og fremmest skal du være forsigtig med, at uafgjorte sager er inkluderet i resultaterne af begge forespørgsler nedenfor. for eksempel. selvom du har medarbejdere med samme ansættelsesdato, er de inkluderet på listerne, hvilket betyder, at listerne har mindst 100 personer.
Hvis din databaseversion er 12c-
, så skal du bruge en underforespørgsel til at returnere resultatet af dense_rank()
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;
Hvis din databaseversion er 12c+
, så behøver du ikke bruge en underforespørgsel af hensyn til fetch
klausul:
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;
Vær opmærksom på din sag ved at bruge partition by
klausulen er forkert og bør fjernes i dense_rank()
funktions udtryk og rækkefølgen af ansættelsesdatoer bør ikke være faldende, men stigende.