Trong Oracle, WIDTH_BUCKET()
hàm cho phép bạn tạo biểu đồ độ rộng tương đương, trong đó phạm vi biểu đồ được chia thành các khoảng có kích thước giống hệt nhau.
Đối với một biểu thức nhất định, WIDTH_BUCKET()
trả về số nhóm mà giá trị của biểu thức này sẽ rơi vào sau khi được đánh giá.
Cú pháp
Cú pháp như sau:
WIDTH_BUCKET(expr, min_value, max_value, num_buckets)
Ở đâu:
-
expr
là biểu thức mà biểu đồ đang được tạo. Biểu thức này phải đánh giá thành một giá trị số hoặc ngày giờ hoặc một giá trị có thể được chuyển đổi ngầm thành giá trị số hoặc ngày giờ. Nếuexpr
đánh giá thànhnull
, thì biểu thức trả vềnull
. -
min_value
vàmax_value
là các biểu thức giải quyết đến các điểm cuối của dải ô có thể chấp nhận được choexpr
. Cả hai biểu thức này cũng phải đánh giá thành giá trị số hoặc giá trị ngày giờ và cả hai biểu thức này đều không thể đánh giá thànhnull
. -
num_buckets
là một biểu thức giải quyết thành một hằng số cho biết số lượng nhóm. Biểu thức này phải đánh giá thành một số nguyên dương.
Ví dụ
Dưới đây là một ví dụ để chứng minh cách hoạt động của nó.
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;
Kết quả:
R1 R2 R3 _____ _____ _____ 1 2 3
Đây là lời giải thích. Hãy kiểm tra từng đối số, bắt đầu từ đối số cuối cùng và làm ngược lại đối số đầu tiên.
- Đối số thứ tư :Tôi chỉ định ba nhóm. Tôi thực hiện việc này bằng cách sử dụng
3
là đối số thứ tư. - Đối số thứ hai và thứ ba :Tôi chỉ định rằng phạm vi nằm trong khoảng từ 1 đến 12. Trong trường hợp này, đối số thứ hai của tôi là
1
và đối số thứ ba là12
. - Đối số đầu tiên :Giá trị này được so sánh với đối số thứ hai và thứ ba, để biết nó nên được gán cho nhóm nào trong số ba nhóm. Trong ví dụ của tôi, tôi gọi
WIDTH_BUCKET()
ba lần để minh họa khái niệm tốt hơn. Tôi làm điều này để có thể cung cấp ba giá trị khác nhau làm đối số đầu tiên, mỗi giá trị được gán cho một nhóm khác nhau.
Bảng sau cung cấp một cách khác để hình dung điều này:
Giá trị | Nhóm |
---|---|
1, 2, 3, 4 | Nhóm 1 |
5, 6, 7, 8 | Nhóm 2 |
9, 10, 11, 12 | Nhóm 3 |
Vì vậy, chúng ta có thể thấy rằng nhóm đầu tiên chấp nhận các giá trị từ 1 đến 4, nhóm thứ hai từ 5 đến 8 và nhóm thứ ba dành cho các giá trị từ 9 đến 12.
Nếu tôi thay đổi nó để có bốn nhóm, mã của tôi có thể trông giống như sau:
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;
Và bảng sẽ như thế này:
Giá trị | Nhóm |
---|---|
1, 2, 3 | Nhóm 1 |
4, 5, 6 | Nhóm 2 |
7, 8, 9 | Nhóm 3 |
10, 11, 12 | Nhóm 4 |
Dưới đây là một ví dụ khác trong đó chỉ kích thước nhóm thay đổi:
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;
Kết quả:
R1 R2 R3 _____ _____ _____ 2 3 4
Ngoài phạm vi
Nếu đầu vào nằm ngoài phạm vi của nhóm, bạn sẽ nhận được 0
hoặc num_buckets
+1, tùy thuộc vào việc đầu vào nằm dưới phạm vi hay cao hơn phạm vi đó. Trong những trường hợp như vậy, Cơ sở dữ liệu Oracle tạo một nhóm quy trình dưới được đánh số 0
và một nhóm tràn được đánh số num_buckets
+1.
Ví dụ:
SELECT
WIDTH_BUCKET(-3, 1, 12, 3),
WIDTH_BUCKET(20, 1, 12, 3)
FROM DUAL;
Kết quả:
WIDTH_BUCKET(-3,1,12,3) WIDTH_BUCKET(20,1,12,3) __________________________ __________________________ 0 4