sql >> Database teknologi >  >> RDS >> Oracle

Brug TOP eller Rank, når du finder de første par eller de fleste observationer

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.

Demo for Top 10-medarbejder




  1. Avanceret indeksering, der involverer OR-ed-betingelser (pgsql)

  2. Sådan konverteres csv-datoformat til mysql db

  3. Postgres Undtagelser og java

  4. Hvordan håndterer man sessioner på tværs af forskellige enheder?