Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Fungsi WIDTH_BUCKET() di Oracle

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. Jika expr dievaluasi menjadi null , maka ekspresi mengembalikan null .
  • min_value dan max_value adalah ekspresi yang menyelesaikan ke titik akhir dari rentang yang dapat diterima untuk expr . Kedua ekspresi ini juga harus mengevaluasi ke nilai numerik atau datetime, dan keduanya tidak dapat mengevaluasi ke null .
  • 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 adalah 12 .
  • 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 

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa perbedaan antara skema Oracle dan Microsoft?

  2. Cara mendekati Got minus satu dari kesalahan panggilan baca saat menghubungkan ke instans Oracle RDS Amazon

  3. hentikan kesalahan kompilasi dalam skrip sqlplus

  4. Bagaimana mengubah format tanggal di database oracle

  5. Bagaimana cara memeriksa jumlah maksimum koneksi yang diizinkan ke database Oracle?