Rumah > pangkalan data > tutorial mysql > Apakah perbezaan antara pangkat () dan padat_rank () di Oracle SQL?

Apakah perbezaan antara pangkat () dan padat_rank () di Oracle SQL?

DDD
Lepaskan: 2025-01-25 00:04:14
asal
806 orang telah melayarinya

What's the Difference Between RANK() and DENSE_RANK() in Oracle SQL?

Oracle SQL: Memahami pangkat () dan DENSE_RANK ()

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:

    : Menetapkan pangkat yang sama kepada baris terikat, mengakibatkan jurang dalam urutan ranking. Sekiranya berbilang baris berkongsi pangkat, pangkat seterusnya melangkaui pangkat terikat. Sebagai contoh, jika tiga baris mengikat tempat kedua, mereka semua akan menerima pangkat "2", dan pangkat seterusnya akan menjadi "5".
  • RANK()

  • : Menetapkan pangkat berturut -turut tanpa jurang, walaupun dengan ikatan. Tidak ada yang melangkau pangkat; Urutan ranking tetap berterusan.
  • DENSE_RANK()

  • Aplikasi Praktikal: Mencari Gaji Tertinggi Nth

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk
dan

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan