Rumah > pangkalan data > tutorial mysql > Apakah perbezaan antara fungsi RANK() dan DENSE_RANK() Oracle, dan bagaimana ia mengendalikan nilai nol?

Apakah perbezaan antara fungsi RANK() dan DENSE_RANK() Oracle, dan bagaimana ia mengendalikan nilai nol?

Patricia Arquette
Lepaskan: 2025-01-24 23:56:08
asal
935 orang telah melayarinya

What are the differences between Oracle's RANK() and DENSE_RANK() functions, and how do they handle null values?

Terokai secara mendalam fungsi RANK() dan DENSE_RANK() Oracle

Dalam bidang analisis dan pengisihan data, Oracle menyediakan dua fungsi berbeza: RANK() dan DENSE_RANK(), yang setiap satunya mempunyai kegunaan khusus. Artikel ini akan meneroka perbezaan halus antara kedua-dua fungsi ini dan senario aplikasinya.

Perbandingan RANK() dan DENSE_RANK()

Fungsi

RANK() memberikan kedudukan kepada baris mengikut susunan yang ditentukan, manakala fungsi DENSE_RANK() menetapkan kedudukan berturut-turut. Sebagai contoh, pertimbangkan senario berikut:

<code class="language-sql">SELECT empname, sal, RANK() OVER (ORDER BY sal) AS r, DENSE_RANK() OVER (ORDER BY sal) AS dr
FROM emptbl;</code>
Salin selepas log masuk
Empname Sal r dr
rrr 10000 2 2
nnn 20000 3 3
mmm 5000 1 1
kkk 30000 4 4
fff 40000 5 5
ddd 40000 5 5
bbb 50000 7 6
ccc 50000 7 6

Dalam contoh ini, walaupun rrr dan nnn mempunyai gaji yang sama, fungsi RANK() memberikan mereka gred yang sama (2), manakala fungsi DENSE_RANK() memberikan gred berturut-turut, memastikan tiada gred dilangkau .

Cari gaji ke-N

Untuk mencari gaji ke-n dalam jadual (contohnya, gaji ketiga tertinggi), anda boleh menggunakan pertanyaan berikut:

<code class="language-sql">SELECT sal FROM emptbl ORDER BY sal DESC LIMIT n-1, 1;</code>
Salin selepas log masuk

Pengendalian nilai nol

Kelakuan RANK() dan DENSE_RANK() berfungsi apabila menemui nilai nol bergantung pada sama ada NULLS FIRST atau NULLS LAST dinyatakan dalam klausa ORDER BY. Sebagai contoh, pertimbangkan jadual berikut yang mengandungi nilai nol untuk gaji:

<code class="language-sql">SELECT empname, sal, RANK() OVER (PARTITION BY deptno ORDER BY sal NULLS FIRST) AS r, DENSE_RANK() OVER (PARTITION BY deptno ORDER BY sal NULLS FIRST) AS dr1
FROM emptbl;</code>
Salin selepas log masuk
Empname Sal r dr1
fff 40000 1 1
ddd 40000 1 1
rrr 10000 3 2
xxx NULL 2 3

Dalam kes ini, nilai nol dianggap mempunyai kedudukan terendah (NULLS FIRST), menghasilkan kedudukan yang berbeza berbanding kes di mana nilai null mempunyai kedudukan tertinggi (NULLS LAST).

Kesimpulan

Fungsi RANK() dan DENSE_RANK() Oracle menyediakan dua kaedah pengisihan data yang berbeza. Memahami perbezaannya dan penggunaan yang sesuai membolehkan anda melakukan analisis data dan tugasan manipulasi dengan berkesan.

Atas ialah kandungan terperinci Apakah perbezaan antara fungsi RANK() dan DENSE_RANK() Oracle, dan bagaimana ia mengendalikan nilai nol?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan