Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Używaj TOP lub Rank, gdy znajdujesz kilka pierwszych lub najwięcej obserwacji

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmień nazwę tabeli lub widoku Oracle

  2. Oracle zwraca stałą, gdy wynik jest pusty

  3. Oracle ODP.Net nie obsługuje nowych linii .Net?

  4. Jak wywołać procedurę składowaną Oracle z azure Data Factory v2?

  5. Uzyskaj górny wiersz po zamówieniu przez w Oracle Subquery