PARTITION BY dengan dan tanpa KEEP dalam Oracle
Klausa PARTITION BY dalam Oracle membolehkan anda mengumpulkan baris dalam jadual dan melaksanakan fungsi agregat pada kumpulan tersebut. Klausa KEEP, apabila digunakan dengan klausa PARTITION BY, membolehkan anda menentukan baris mana yang perlu disimpan semasa mengira fungsi agregat.
Pertimbangkan dua pertanyaan berikut:
SELECT empno, deptno, sal, MIN(sal) OVER (PARTITION BY deptno) "Lowest", MAX(sal) OVER (PARTITION BY deptno) "Highest" FROM empl SELECT empno, deptno, sal, MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno) "Lowest", MAX(sal) KEEP (DENSE_RANK LAST ORDER BY sal) OVER (PARTITION BY deptno) "Highest" FROM empl
Kedua-dua pertanyaan kelihatan untuk mendapat keputusan yang sama: mereka mengira gaji terendah dan tertinggi bagi setiap jabatan. Walau bagaimanapun, terdapat perbezaan yang ketara antara kedua-dua pertanyaan.
Dalam pertanyaan pertama, fungsi MIN dan MAX digunakan pada semua baris dalam setiap partition. Dalam pertanyaan kedua, klausa KEEP digunakan untuk menyatakan bahawa hanya baris pertama dan terakhir dalam setiap partition harus disertakan dalam pengiraan.
Klausa KEEP boleh digunakan dengan mana-mana fungsi agregat. Ia amat berguna apabila anda ingin mencari kejadian pertama atau terakhir bagi sesuatu nilai dalam satu set baris.
Sebagai contoh, pertanyaan berikut mencari nama pertama dan terakhir pekerja dengan gaji tertinggi dalam setiap jabatan :
SELECT empno, deptno, sal, MIN(name) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno) AS "First Highest Salary", MAX(name) KEEP (DENSE_RANK LAST ORDER BY sal) OVER (PARTITION BY deptno) AS "Last Highest Salary" FROM empl GROUP BY deptno
Klausa KEEP juga boleh digunakan untuk mengoptimumkan prestasi. Dengan menyatakan bahawa hanya baris pertama atau terakhir dalam setiap partition harus disertakan dalam pengiraan, anda boleh mengurangkan jumlah data yang perlu diproses oleh pangkalan data. Ini boleh meningkatkan prestasi pertanyaan anda, terutamanya jika anda menggunakan set data yang besar.
Atas ialah kandungan terperinci Bagaimanakah Klausa `KEEP` Mempengaruhi `PARTITITION BY` dalam Fungsi Agregat Oracle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!