Mengekstrak 5 Nilai Tertinggi Teratas daripada Lajur Oracle SQL
Panduan ini menunjukkan cara untuk mendapatkan semula lima nilai tertinggi teratas dengan cekap daripada lajur tertentu dalam pangkalan data Oracle SQL anda. Kami akan meneroka beberapa pendekatan menggunakan fungsi analitik dan kaedah bukan analitik.
Kaedah Menggunakan Fungsi Analitik:
Fungsi RANK()
, DENSE_RANK()
dan ROW_NUMBER()
menyediakan cara yang berkesan untuk menentukan kedudukan baris berdasarkan nilai lajur.
1. Menggunakan RANK():
<code class="language-sql">SELECT * FROM ( SELECT empno, sal, RANK() OVER (ORDER BY sal DESC) AS rnk FROM emp ) WHERE rnk <= 5;</code>
Fungsi RANK()
menetapkan pangkat berdasarkan susunan gaji menurun (sal
). Baris dengan gaji yang sama menerima pangkat yang sama, mengakibatkan jurang dalam urutan kedudukan.
2. Menggunakan DENSE_RANK():
<code class="language-sql">SELECT * FROM ( SELECT empno, sal, DENSE_RANK() OVER (ORDER BY sal DESC) AS rnk FROM emp ) WHERE rnk <= 5;</code>
DENSE_RANK()
adalah serupa dengan RANK()
, tetapi ia memberikan kedudukan berturut-turut tanpa jurang, walaupun apabila ikatan wujud.
3. Menggunakan ROW_NUMBER():
<code class="language-sql">SELECT * FROM ( SELECT empno, sal, ROW_NUMBER() OVER (ORDER BY sal DESC) AS rnk FROM emp ) WHERE rnk <= 5;</code>
ROW_NUMBER()
memberikan kedudukan unik kepada setiap baris berdasarkan susunan yang ditentukan. Berhati-hati dengan ikatan, kerana ia mungkin sewenang-wenangnya mengecualikan beberapa baris.
Pendekatan Bukan Analitik (Menggunakan ROWNUM):
Kaedah yang lebih mudah, namun kurang mantap, melibatkan penggunaan ROWNUM
:
<code class="language-sql">SELECT * FROM emp WHERE ROWNUM <= 5 ORDER BY sal DESC;</code>
Pendekatan ini menyusun data mengikut gaji dan kemudian mengehadkan keputusan yang ditetapkan kepada lima baris pertama. Walau bagaimanapun, ROWNUM
digunakan sebelum klausa ORDER BY
, yang berpotensi membawa kepada keputusan yang salah jika terdapat pertalian dalam nilai gaji. Kaedah ini secara amnya kurang dipercayai daripada pendekatan fungsi analitik. Oleh itu, menggunakan RANK()
, DENSE_RANK()
atau ROW_NUMBER()
amat disyorkan untuk mendapatkan hasil yang tepat dan konsisten.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan 5 Nilai Tertinggi Teratas daripada Lajur Oracle SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!