Artikel ini menjelaskan perbezaan utama antara fungsi
dan dalam Oracle SQL, yang memberi tumpuan kepada tingkah laku kedudukan mereka, terutamanya apabila berurusan dengan hubungan dan nilai null.
RANK()
DENSE_RANK()
Perbezaan utama:
Kedua -dua fungsi memberikan pangkat ke baris dalam dataset berdasarkan pesanan yang ditentukan. Perbezaan penting terletak pada pengendalian hubungan mereka:
RANK()
DENSE_RANK()
Untuk mengambil gaji tertinggi nth dari jadual menggunakan
, anda boleh menggunakan pertanyaan yang serupa dengan ini (walaupun kaedah yang lebih efisien wujud):
emptbl
RANK()
Gaji ini dalam urutan menurun dan penapis untuk baris dengan pangkat yang dikehendaki.
<code class="language-sql">SELECT empname FROM (SELECT empname, RANK() OVER (ORDER BY sal DESC) as sal_rank FROM emptbl) WHERE sal_rank = n;</code>
pengendalian nilai null:
Rawatan nilai null bergantung kepada klausa . Jika nulls diperintahkan terlebih dahulu (
), mereka akan menerima pangkat terendah. Jika diperintahkan terakhir (), mereka akan menerima pangkat tertinggi. ORDER BY
ORDER BY sal NULLS FIRST
ORDER BY sal NULLS LAST
Contoh ilustrasi:
mari kita periksa ini dengan data sampel:
pertanyaan:
<code>DEPTNO EMPNAME SAL ------------------------------ 10 rrr 10000.00 11 nnn 20000.00 11 mmm 5000.00 12 kkk 30000.00 10 fff 40000.00 10 ddd 40000.00 10 bbb 50000.00 10 ccc 50000.00</code>
menghasilkan hasil yang jelas menunjukkan perbezaan:
Menunjukkan pangkat Skipping, manakala<code class="language-sql">SELECT empname, deptno, sal, RANK() OVER (PARTITION BY deptno ORDER BY sal NULLS FIRST) as rnk, DENSE_RANK() OVER (PARTITION BY deptno ORDER BY sal NULLS FIRST) as drnk_first, DENSE_RANK() OVER (PARTITION BY deptno ORDER BY sal NULLS LAST) as drnk_last FROM emptbl;</code>
menunjukkan kedudukan berturut -turut dengan nulls dikendalikan secara berbeza. Jadual output secara visual mewakili tingkah laku ranking yang berbeza. (Nota: Contohnya menganggap jadual bernama rnk
ada dengan data yang disediakan; ganti dengan nama jadual sebenar anda.) drnk_first
Atas ialah kandungan terperinci Apakah perbezaan antara pangkat () dan padat_rank () di Oracle SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!