Rumah >pangkalan data >tutorial mysql >Bagaimanakah Klausa `KEEP` Mempengaruhi Fungsi Agregat `PARTITITION BY` dalam Oracle?

Bagaimanakah Klausa `KEEP` Mempengaruhi Fungsi Agregat `PARTITITION BY` dalam Oracle?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-21 09:35:10315semak imbas

How Does the `KEEP` Clause Affect `PARTITION BY` Aggregate Functions in Oracle?

PARTITION BY dengan dan tanpa KEEP dalam Oracle

Klausa PARTITION BY dalam Oracle membenarkan pengguna mengumpulkan baris dalam jadual berdasarkan lajur yang ditentukan untuk pengiraan agregat. Dalam sesetengah kes, klausa KEEP boleh digunakan bersama dengan PARTITION BY untuk mengawal pengekalan baris individu dalam setiap partition.

Sintaks dengan KEEP:

MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno)

Dalam sintaks ini, klausa KEEP diikuti dengan DENSE_RANK FIRST, menunjukkan bahawa baris dengan gaji terendah hendaklah disimpan dalam setiap partition. DENSE_RANK memastikan kedudukan berterusan, bermakna baris dengan gaji yang sama akan mempunyai pangkat yang sama.

Sintaks tanpa KEEP:

MIN(sal) OVER (PARTITION BY deptno)

Dalam sintaks ini, klausa KEEP ditinggalkan . Tanpa KEEP, semua baris dalam setiap partition dipertimbangkan untuk pengiraan agregat, yang boleh membawa kepada berbilang baris dengan nilai yang sama disertakan dalam hasilnya.

Perbezaan:

Perbezaan utama antara dua pertanyaan ialah:

  • Dengan KEEP: Hanya barisan dengan gaji terendah dalam setiap jabatan dimasukkan dalam keputusan.
  • Tanpa KEEP: Semua baris dalam setiap jabatan dimasukkan dalam keputusan, yang berpotensi membawa kepada nilai gaji minimum pendua.

Berlebihan KEEP:

Dalam contoh yang disediakan, klausa KEEP adalah berlebihan kerana fungsi MIN juga digunakan pada lajur yang sama (sal). Akibatnya, barisan pertama berdasarkan gaji akan sentiasa menjadi yang mempunyai gaji paling rendah.

Contoh dengan Lajur Pesanan Berbeza:

Namun, jika berbeza lajur pesanan digunakan untuk klausa KEEP, ia boleh memberi kesan yang berbeza:

MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY name) OVER (PARTITION BY deptno)

Dalam kes ini, barisan dengan gaji paling rendah antara mereka yang mempunyai pesanan (nama) yang sama akan disimpan dalam setiap partition. Ini membolehkan pengguna memilih gaji terendah untuk pekerja dengan nama tertentu dalam setiap jabatan.

Atas ialah kandungan terperinci Bagaimanakah Klausa `KEEP` Mempengaruhi Fungsi Agregat `PARTITITION BY` dalam Oracle?. 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