Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Gunakan TOP atau Rank ketika menemukan beberapa pengamatan pertama atau paling banyak

Untuk mendapatkan 100 orang pertama yang dipekerjakan di perusahaan

Pertama-tama, Hati-hati dengan kasus dasi yang disertakan dalam hasil kedua kueri di bawah ini. misalnya bahkan jika Anda memiliki karyawan dengan tanggal perekrutan yang sama, mereka termasuk dalam daftar, artinya daftar tersebut memiliki setidaknya 100 orang.

Jika versi Database Anda adalah 12c- , maka Anda perlu menggunakan subquery untuk mengembalikan hasil dense_rank() fungsi :

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;

Jika versi Database Anda adalah 12c+ , maka Anda tidak perlu menggunakan subquery demi fetch klausa :

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;

Perhatikan kasus Anda yang menggunakan partition by klausa salah dan harus dihapus dalam dense_rank() ekspresi fungsi, dan urutan tanggal sewa tidak boleh turun tetapi naik.

Demo untuk 10 Karyawan Teratas




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. BUAT dan DROP TABLESPACE Oracle

  2. ORA 01400 dan ORA 02296 :Tidak dapat menyisipkan null atau mengubah properti kolom yang ditambahkan menjadi NOT NULL

  3. koneksi jdbc menggunakan driver tipis

  4. Membuat array asosiatif tingkat paket di java

  5. Kesalahan ORA-00604 saat penyisipan batch di dalam TransactionScope