카테고리:

숫자 함수

WIDTH_BUCKET

히스토그램 범위가 동일 크기의 간격으로 분할되는 등폭 히스토그램을 구성하며, 식의 값을 평가한 후 해당 값이 속하는 버킷 번호를 반환합니다. 이 함수는 정수 값 또는 null(입력이 null인 경우)을 반환합니다.

구문

WIDTH_BUCKET( <expr> , <min_value> , <max_value> , <num_buckets> )
Copy

인자

expr

히스토그램이 만들어지는 식입니다. 이 식은 숫자 값으로 평가되거나, 암시적으로 숫자 값으로 변환할 수 있는 값으로 평가되어야 합니다.

값은 -(2^53 - 1) 에서 2^53 - 1 범위(해당 값 포함) 내에 있어야 합니다.

min_valuemax_value

식에 대해 허용되는 범위의 하한 및 상한 끝점입니다. 끝점도 숫자 값으로 평가되어야 하며, 같지 않아야 합니다.

하한 및 상한 끝점은 -(2^53 - 1) 에서 2^53 - 1 범위(해당 값 포함) 내에 있어야 합니다. 또한 이러한 점 사이의 차이는 2^53 (즉, abs(max_value - min_value) < 2^53)보다 작아야 합니다.

num_buckets

원하는 버킷 수로, 양의 정수 값이어야 합니다. 식의 값이 각 버킷에 할당되고 함수는 해당 버킷 번호를 반환합니다.

식이 범위를 벗어나면 함수는 다음을 반환합니다.

  • 식이 min_value 보다 작으면 0 입니다.

  • 식이 num_buckets + 1 보다 크거나 같으면 max_value 입니다.

$200-600,000의 가격 범위에서 판매된 주택의 price 열에 4개 버킷 히스토그램을 만들고 판매 날짜를 기준으로 정렬합니다. 이 함수는 세트의 각 값에 대한 버킷 번호(SALES GROUP)를 반환합니다.

테이블을 만들고 채웁니다.

CREATE TABLE home_sales (
    sale_date DATE,
    price NUMBER(11, 2)
    );
INSERT INTO home_sales (sale_date, price) VALUES 
    ('2013-08-01'::DATE, 290000.00),
    ('2014-02-01'::DATE, 320000.00),
    ('2015-04-01'::DATE, 399999.99),
    ('2016-04-01'::DATE, 400000.00),
    ('2017-04-01'::DATE, 470000.00),
    ('2018-04-01'::DATE, 510000.00);
Copy

WIDTH_BUCKET()을 호출하여 테이블을 쿼리합니다.

SELECT 
    sale_date, 
    price,
    WIDTH_BUCKET(price, 200000, 600000, 4) AS "SALES GROUP"
  FROM home_sales
  ORDER BY sale_date;
+------------+-----------+-------------+
| SALE_DATE  |     PRICE | SALES GROUP |
|------------+-----------+-------------|
| 2013-08-01 | 290000.00 |           1 |
| 2014-02-01 | 320000.00 |           2 |
| 2015-04-01 | 399999.99 |           2 |
| 2016-04-01 | 400000.00 |           3 |
| 2017-04-01 | 470000.00 |           3 |
| 2018-04-01 | 510000.00 |           4 |
+------------+-----------+-------------+
Copy