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

Bagaimana menemukan karyawan dengan gaji tertinggi kedua?

Cara melakukannya adalah dengan fungsi Analytic Oracle. Skenario khusus Anda hanyalah varian dari solusi yang saya berikan di utas lain.

Jika Anda tertarik untuk hanya memilih gaji tertinggi kedua maka salah satu DENSE_RANK(), RANK() dan ROW_NUMBER() akan melakukan triknya:

SQL> select * from
  2   ( select sal
  3            , rank() over (order by sal desc) as rnk
  4     from
  5      ( select distinct sal
  6        from emp )
  7    )
  8  where rnk = 2
  9  /

       SAL        RNK
---------- ----------
      3000          2

SQL> 

Namun, jika Anda ingin memilih informasi tambahan, seperti nama karyawan dengan gaji tertinggi kedua, fungsi yang Anda pilih akan mempengaruhi hasil. Alasan utama untuk memilih satu di atas yang lain adalah apa yang terjadi ketika ada dasi.

Jika Anda menggunakan ROW_NUMBER() itu akan mengembalikan karyawan kedua yang diurutkan berdasarkan gaji:bagaimana jika ada dua karyawan yang mengikat untuk gaji tertinggi? Bagaimana jika ada dua karyawan yang mengikat untuk gaji tertinggi kedua? Sedangkan jika Anda menggunakan RANK() dan ada dua karyawan yang mengikat untuk gaji tertinggi pertama, akan ada tidak record dengan RANK =2.

Saya menyarankan DENSE_RANK() biasanya merupakan fungsi teraman untuk dipilih dalam kasus ini, tetapi itu benar-benar tergantung pada kebutuhan bisnis tertentu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan Alias ​​​​Saat Bagian dari Pernyataan Kasus di Oracle SQL

  2. Apakah ODP.NET memerlukan instalasi Oracle Client?

  3. Menginstal RAC untuk Database dengan Datafiles

  4. REPLACE() Fungsi di Oracle

  5. Oracle Floats vs Number