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

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

Linda Hamilton
Lepaskan: 2024-12-29 21:06:21
asal
381 orang telah melayarinya

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

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

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

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!

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