Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mendapatkan Nilai N Tertinggi Tertinggi dengan Cekap dalam Oracle SQL?
Mengekstrak Rekod N Teratas dalam Oracle SQL
Perlu mengambil bilangan baris tertentu dengan nilai tertinggi atau terendah dalam lajur? Fungsi analitik Oracle, seperti RANK()
dan DENSE_RANK()
, menyediakan penyelesaian yang cekap.
Sebagai contoh, untuk mengenal pasti lima pekerja teratas berpendapatan tertinggi, gunakan RANK()
:
<code class="language-sql">SELECT * FROM ( SELECT empno, sal, RANK() OVER (ORDER BY sal DESC) AS rnk FROM emp ) WHERE rnk <= 5;</code>
DENSE_RANK()
menawarkan variasi, menghapuskan jurang dalam kedudukan yang disebabkan oleh ikatan:
<code class="language-sql">SELECT * FROM ( SELECT empno, sal, DENSE_RANK() OVER (ORDER BY sal DESC) AS rnk FROM emp ) WHERE rnk <= 5;</code>
Pendekatan terbaik bergantung pada keperluan khusus anda.
ROW_NUMBER()
memberikan kedudukan unik pada setiap baris, tetapi ia sewenang-wenangnya mengalih keluar ikatan, yang mungkin tidak sesuai untuk semua senario.
<code class="language-sql">SELECT * FROM ( SELECT empno, sal, ROW_NUMBER() OVER (ORDER BY sal DESC) AS rnk FROM emp ) WHERE rnk <= 5;</code>
Walaupun kaedah bukan analitik menggunakan ROWNUM
wujud, kaedah ini kurang boleh dipercayai kerana kemungkinan ketidakkonsistenan dan secara amnya kurang diutamakan. Kaedah fungsi analitik di atas memberikan hasil yang lebih mantap dan boleh diramal.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Nilai N Tertinggi Tertinggi dengan Cekap dalam Oracle SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!