Di Oracle, WIDTH_BUCKET()
fungsi memungkinkan Anda untuk membuat histogram equiwidth, di mana rentang histogram dibagi menjadi interval yang memiliki ukuran identik.
Untuk ekspresi tertentu, WIDTH_BUCKET()
mengembalikan nomor ember tempat nilai ekspresi ini akan jatuh setelah dievaluasi.
Sintaks
Sintaksnya seperti ini:
WIDTH_BUCKET(expr, min_value, max_value, num_buckets)
Dimana:
expr
adalah ekspresi yang histogram sedang dibuat. Ekspresi ini harus mengevaluasi ke nilai numerik atau datetime atau ke nilai yang bisa secara implisit dikonversi ke nilai numerik atau datetime. Jikaexpr
dievaluasi menjadinull
, maka ekspresi mengembalikannull
.min_value
danmax_value
adalah ekspresi yang menyelesaikan ke titik akhir dari rentang yang dapat diterima untukexpr
. Kedua ekspresi ini juga harus mengevaluasi ke nilai numerik atau datetime, dan keduanya tidak dapat mengevaluasi kenull
.num_buckets
adalah ekspresi yang menghasilkan konstanta yang menunjukkan jumlah ember. Ekspresi ini harus bernilai bilangan bulat positif.
Contoh
Berikut ini contoh untuk mendemonstrasikan cara kerjanya.
SELECT
WIDTH_BUCKET(3, 1, 12, 3) AS r1,
WIDTH_BUCKET(5, 1, 12, 3) AS r2,
WIDTH_BUCKET(9, 1, 12, 3) AS r3
FROM DUAL;
Hasil:
R1 R2 R3 _____ _____ _____ 1 2 3
Berikut penjelasannya. Mari kita periksa setiap argumen, mulai dari yang terakhir dan bekerja mundur ke yang pertama.
- Argumen keempat :Saya menentukan tiga ember. Saya melakukan ini dengan menggunakan
3
sebagai argumen keempat. - Argumen kedua dan ketiga :Saya menetapkan bahwa rentangnya adalah antara 1 dan 12. Dalam hal ini, argumen kedua saya adalah
1
dan argumen ketiga adalah12
. - Argumen pertama :Nilai ini dibandingkan dengan argumen kedua dan ketiga, untuk mengetahui mana dari tiga ember yang harus ditetapkan. Dalam contoh saya, saya memanggil
WIDTH_BUCKET()
tiga kali untuk menggambarkan konsep yang lebih baik. Saya melakukan ini agar saya dapat memberikan tiga nilai berbeda sebagai argumen pertama, yang masing-masing ditetapkan ke keranjang yang berbeda.
Tabel berikut memberikan cara lain untuk memvisualisasikan ini:
Nilai | Ember |
---|---|
1, 2, 3, 4 | Ember 1 |
5, 6, 7, 8 | Ember 2 |
9, 10, 11, 12 | Ember 3 |
Jadi kita dapat melihat bahwa ember pertama menerima nilai antara 1 dan 4, ember kedua antara 5 dan 8, dan ember ketiga untuk nilai antara 9 dan 12.
Jika saya mengubahnya sehingga ada empat ember, kode saya mungkin terlihat seperti ini:
SELECT
WIDTH_BUCKET(3, 1, 12, 4) AS r1,
WIDTH_BUCKET(5, 1, 12, 4) AS r2,
WIDTH_BUCKET(9, 1, 12, 4) AS r3
FROM DUAL;
Dan tabelnya akan terlihat seperti ini:
Nilai | Ember |
---|---|
1, 2, 3 | Ember 1 |
4, 5, 6 | Ember 2 |
7, 8, 9 | Ember 3 |
10, 11, 12 | Ember 4 |
Berikut contoh lain di mana hanya ukuran ember yang berubah:
SELECT
WIDTH_BUCKET(5, 1, 12, 3) AS r1,
WIDTH_BUCKET(5, 1, 12, 6) AS r2,
WIDTH_BUCKET(5, 1, 12, 10) AS r3
FROM DUAL;
Hasil:
R1 R2 R3 _____ _____ _____ 2 3 4
Di Luar Jangkauan
Jika input berada di luar rentang bucket, Anda akan mendapatkan 0
atau num_buckets
+1, tergantung pada apakah input di bawah kisaran atau di atasnya. Dalam kasus seperti itu, Oracle Database membuat ember underflow bernomor 0
dan ember pelimpah bernomor num_buckets
+1.
Contoh:
SELECT
WIDTH_BUCKET(-3, 1, 12, 3),
WIDTH_BUCKET(20, 1, 12, 3)
FROM DUAL;
Hasil:
WIDTH_BUCKET(-3,1,12,3) WIDTH_BUCKET(20,1,12,3) __________________________ __________________________ 0 4