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().