Rumah >pangkalan data >tutorial mysql >Bagaimanakah Fungsi Analitik Oracle Mendapat Gaji Pekerja Kedua Tertinggi?

Bagaimanakah Fungsi Analitik Oracle Mendapat Gaji Pekerja Kedua Tertinggi?

DDD
DDDasal
2025-01-07 17:56:40189semak imbas

How Can Oracle's Analytic Functions Find the Second Highest Employee Salary?

Gunakan fungsi analitik Oracle untuk mencari gaji pekerja kedua tertinggi

Mencari gaji kedua tertinggi adalah keperluan biasa dalam jadual data pekerja. Tidak seperti bahasa pengaturcaraan lain, Oracle menyediakan satu siri fungsi analitik untuk memudahkan tugas ini.

Cari fungsi yang telah ditetapkan untuk gaji kedua tertinggi

Oracle menyediakan beberapa fungsi analisis yang boleh membantu mencari gaji kedua tertinggi. Ini termasuk:

  • PADA_PERINGKAT()
  • KEDUDUKAN()
  • ROW_NUMBER()

Pilih hanya gaji kedua tertinggi

Jika anda hanya perlu mendapatkan gaji kedua tertinggi, anda boleh menggunakan mana-mana fungsi di atas. Contohnya:

<code class="language-sql">SELECT sal
FROM (
  SELECT DISTINCT sal,
         RANK() OVER (ORDER BY sal DESC) AS rnk
  FROM emp
)
WHERE rnk = 2;</code>

Pilih maklumat pekerja lain

Apabila memilih maklumat pekerja lain, kerana pertindihan perlu dipertimbangkan, pilihan fungsi menjadi sangat penting.

ROW_NUMBER()

ROW_NUMBER() akan memulangkan pekerja kedua dalam susunan gaji. Walau bagaimanapun, ia mungkin melangkau barisan jika terdapat seri untuk gaji tertinggi atau kedua tertinggi.

PANGKAT()

RANK() akan melangkau rekod jika terdapat seri untuk gaji tertinggi. Dalam kes ini, tidak akan ada rekod dengan RANK = 2.

DENSE_RANK()

DENSE_RANK() biasanya diutamakan kerana ia mengekalkan susunan rekod walaupun dalam keadaan seri. Ia memberikan kedudukan unik kepada rekod yang terikat.

Pilih gaji dan nama kedua tertinggi

Untuk memilih kedua-dua gaji kedua tertinggi dan nama pekerja, anda boleh menggunakan gabungan fungsi:

<code class="language-sql">SELECT name, sal
FROM emp
WHERE sal = (SELECT MAX(sal) FROM emp WHERE sal < (SELECT MAX(sal) FROM emp));</code>

Sebagai alternatif, untuk menyatakan logik dengan lebih jelas, anda boleh menggunakan kaedah berikut:

<code class="language-sql">SELECT name, sal
FROM (
    SELECT name, sal, DENSE_RANK() OVER (ORDER BY sal DESC) as rank
    FROM emp
) ranked_salaries
WHERE rank = 2;
</code>

Atas ialah kandungan terperinci Bagaimanakah Fungsi Analitik Oracle Mendapat Gaji Pekerja Kedua Tertinggi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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