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

Oracle SQL - Cara Mengambil 5 nilai tertinggi dari sebuah kolom

Cara terbaik untuk melakukannya adalah dengan fungsi analitik, RANK() atau DENSE_RANK() ...

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

     EMPNO        SAL        RNK
---------- ---------- ----------
      7839       5000          1
      7788       3000          2
      7902       3000          2
      7566       2975          4
      8083       2850          5
      7698       2850          5

6 rows selected.

SQL>

DENSE_RANK() mengompresi celah ketika ada seri:

SQL> select * from (
  2        select empno
  3               , sal
  4               , dense_rank() over (order by sal desc) as rnk
  5        from emp)
  6  where rnk <= 5
  7  /

     EMPNO        SAL        RNK
---------- ---------- ----------
      7839       5000          1
      7788       3000          2
      7902       3000          2
      7566       2975          3
      8083       2850          4
      7698       2850          4
      8070       2500          5

7 rows selected.

SQL>

Perilaku mana yang Anda sukai tergantung pada kebutuhan bisnis Anda.

Ada juga fungsi analitik ROW_NUMBER() yang dapat kita gunakan untuk mengembalikan jumlah baris yang tepat. Namun, kita harus menghindari penggunaan solusi berdasarkan nomor baris kecuali logika bisnis dengan senang hati memotong hasil yang ditetapkan jika terjadi seri. Ada perbedaan antara meminta lima nilai tertinggi dan lima catatan pertama diurutkan berdasarkan nilai tinggi

Ada juga solusi non-analitik menggunakan kolom semu ROWNUM. Ini kikuk karena ROWNUM diterapkan sebelum klausa ORDER BY, yang dapat menyebabkan hasil yang tidak diharapkan. Jarang ada alasan untuk menggunakan ROWNUM alih-alih ROW_NUMBER() atau salah satu fungsi peringkat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-00936:oracle ekspresi hilang

  2. Apa Itu Prosedur Tersimpan PL/SQL Dalam Database Oracle?

  3. Koleksi Oracle PL/SQL - Buat Tabel Bersarang di Database

  4. Melihat Grup Oracle-oleh Bug

  5. Mengapa menjalankan kueri ini dengan EXECUTE IMMEDIATE menyebabkannya gagal?