sql >> Databáze >  >> RDS >> Oracle

Při hledání prvních nebo nejvíce pozorování použijte TOP nebo Rank

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ů




  1. Nedostatečná oprávnění při vytváření tabulek v Oracle SQL Developer

  2. Jak získat řádkovou reprezentaci vygenerované tabulky?

  3. Proč Oracle říká, že nejde o výraz GROUP BY?

  4. ADDTIME() vrátí 24hodinový čas