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

Bagaimana saya bisa memilih catatan dengan gaji tertinggi ke-2 di database Oracle?

RANK dan DENSE_RANK telah disarankan - tergantung pada kebutuhan Anda, Anda juga dapat mempertimbangkan ROW_NUMBER():

select * from (
  select e.*, row_number() over (order by sal desc) rn from emp e
)
where rn = 2;

Perbedaan antara RANK(), DENSE_RANK() dan ROW_NUMBER() bermuara pada:

  • ROW_NUMBER() selalu menghasilkan peringkat unik; jika klausa ORDER BY tidak dapat membedakan antara dua baris, itu akan tetap memberikan peringkat yang berbeda (secara acak)
  • RANK() dan DENSE_RANK() akan memberikan peringkat yang sama untuk baris yang tidak dapat dibedakan dengan klausa ORDER BY
  • DENSE_RANK() akan selalu menghasilkan urutan peringkat yang berdekatan (1,2,3,...), sedangkan RANK() akan meninggalkan celah setelah dua atau lebih baris dengan peringkat yang sama (pikirkan "Olympic Games":jika dua atlet memenangkan medali emas, tidak ada tempat kedua, hanya ketiga)

Jadi, jika Anda hanya menginginkan satu karyawan (walaupun ada beberapa karyawan dengan gaji tertinggi ke-2), saya akan merekomendasikan ROW_NUMBER().



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tanggal Javascript ke objek tanggal sql

  2. Oracle - Gabung luar kiri dengan klausa where

  3. ORA-00923:FROM kata kunci tidak ditemukan di tempat yang diharapkan - SQLDeveloper

  4. Kesalahan SQL:ORA-00907:tanda kurung kanan hilang

  5. Kembalikan baris dengan nilai maksimal satu kolom per grup