본문 바로가기
오라클 게시판/오라클 함수

【오라클(Oracle) SQL 함수】 WIDTH_BUCKET 함수

by 기서무나구물 2021. 10. 24.

포스팅 목차

    [오라클 SQL 함수(Oracle SQL Function) 목록 리스트 링크]

    WIDTH_BUCKET

     


    문 법

     

    width_bucket::=

     


    목 적

    WIDTH_BUCKET함수는 동일한 넓이를 갖는 히스토그램을 생성한다.

    (동일한 높이를 갖는 히스토그램을 생성하는 NTILE함수를 비교) 이론적으로 각 버킷이 실수 라인의 closed-open 간격이다. 예를 들어, 10은 포함하고 20은 배제되는 것을 나타내기 위해서 버킷은 10.00과 19.99... 사이의 스코어를 할당할 수 있다. 이것은 종종 [10,20)으로 나타낸다.

    주어진 표현에 대해서, WIDTH_BUCKET은 이 식의 값이 평가된 후에 해당하는 버킷 수를 반환한다.

    • expr은 히스트그램이 생성되는 표현이다. 이 식은 수치, Datetime값 또는 암묵적으로 수치 또는 Datetime값으로 변환 가능한 값을 평가할 수 있다. 만약 expr이 Null로 평가되면, 식은 Null을 반환한다.
    • min_value과 max_value은 expr에 대하여 허용 가능한 범위의 끝점을 결정하는 표현이다. 이 표현의 양쪽 모두는 수치 또는 Datetime으로 평가될 필요가 있어서, 모두 Null로 평가되지는 않는다.
    • num_buckets은 버킷의 수를 예측하는 상수를 결정하는 표현이다. 이 표현은 양의 정수로 평가될 필요가 있다.

    오라클 데이터 베이스는 필요에 따라서 0의 하위 버킷과 num_buckets+1의 상위 버킷을 생성한다. 이런 버킷은 min_value보다 적거나 max_value 값보다 큰 값을 처리해, endpoints의 타당성 체크에 유용하다.


    참 고

     WIDTH_BUCKET 함수가 만드는 각각의 범위 구간(bucket이라고 한다)은 실수 영역에서 반개구간(closed-open interval, half-open interval)을 형성한다.
      예를 들어, 하나의 범위 구간이 10에서 20 사이라고 하면, 실제로는 [10, 20)와 같은 범위 즉 10보다 크거나 같고 20보다 작은(x>=10 and x<20) 범위를 만드는 것이다.

      첫 번째 파라미터인 expr은 히스토그램이 만들어질 표현식이며, 이 값이 NULL일 경우 결괏값도 NULL이 된다.

      두 번째, 세 번째 파라미터 min_value, max_value는 expr을 구간으로 나눌 때 최솟값, 최댓값을 의미하며, NULL값이 올 수 없다.

      네 번째 파라미터 num_buckets는 만들 구간(bucket)의 수를 의미하며, 양수이어야 한다.

      만약 해당 항목의 값이 min_value 보다 작으면 0을 반환하고, max_value보다 크거나 같으면(같을 때도 포함된다. 반개 구간이므로) num_buckets+1 값을 반환한다.

     


    관련 함수

    함수명 함수 내용
    CUME_DIST
    그룹에 존재하는 관측치의 누적 분포 값을 계산한다.
    DENSE_RANK Rank()와 유사한 함수로 각 그룹별로 ORDER BY절에 사용된 칼럼이나 표현식을 기준으로 정렬하고, 그룹 내의 각 열에 대한 순위를 부여한다. 
    LAG 이 함수는 Self 조인 작업 수행하지 않고, 하나의 테이블을 접근하면서 여러 개의 행에 동시에 접근(Access)하여 작업한다. LAG 함수는 현재 위치를 기준으로 이전에 지정한 행에 접근하여 작업을 수행한다.
    LEAD 이 함수는 Self 조인 작업을 수행하지 않고, 하나의 테이블을 접근하면서 여러 개의 행에 동시에 접근(Access)하여 작업한다. 쿼리에서 수행되는 행의 Series나 커서의 위치를 지정하면, LEAD 함수는 해당 위치 이후에 존재하는 물리적 Offset의 행에 ACCESS 한다.
    NTILE 그룹 내에서 정렬된 데이터를 expr에 의해 지정된 bucket의 수로 분할하여, 각 행을 적절한 bucket의 번호를 부여하여 할당한다.
    PERCENT_RANK
    인수로 지정한 값의 그룹 내의 위치를 나타내는 백분위 순위(순위 퍼센트, Percent rank)를 반환한다.
    RANK 값의 그룹에서 값의 순위를 계산한다. 반환되는 데이터형은 NUMBER이다.
    RATIO_TO_REPORT 개별 그룹에서 관측치 합에 대한 개별 관측치 값의 상대적 비율(구성비, 점유율, Share)을 계산한다.
    ROW_NUMBER 이 함수는 파티션 그룹별 또는 전체 데이터에 대하여 order_by_clause에서 지정된 행의 정렬 순위대로 1로 시작하는 중복을 허용하지 않는 유일한(unique) 순서 값을 할당한다. (파티션에서 각 행 또는 쿼리에 의해서 반환되는 각 행에 대하여)
    WIDTH_BUCKET 동일한 넓이를 갖는 히스토그램을 생성한다.

     


    예 제

    다음 예제는 샘플 테이블 oe.customers에서 스위스에서 고객의 credit_limit열에서 10 버킷의 히스토그램을 생성하고, 각 고객에 대한 버킷 수("Credit Group")를 반환한다. 최대치 값보다 큰 신용 한도액을 가지는 고객은 상위 버킷 11에 할당된다.

    Oracle Program
    SELECT customer_id, cust_last_name, credit_limit, 
           WIDTH_BUCKET(credit_limit, 100, 5000, 10) "Credit Group"
    FROM   customers 
    WHERE  nls_territory = 'SWITZERLAND'
    ORDER
       BY  "Credit Group";

     

    Results
    CUSTOMER_ID CUST_LAST_NAME       CREDIT_LIMIT Credit Group
    ----------- -------------------- ------------ ------------
            825 Dreyfuss                      500            1
            826 Barkin                        500            1
            853 Palin                         400            1
            827 Siegel                        500            1
            843 Oates                         700            2
            844 Julius                        700            2
            835 Eastwood                     1200            3
            840 Elliott                      1400            3
            842 Stern                        1400            3
            841 Boyer                        1400            3
            837 Stanton                      1200            3
            836 Berenger                     1200            3
            848 Olmos                        1800            4
            849 Kaurusmdki                   1800            4
            828 Minnelli                     2300            5
            829 Hunter                       2300            5
            852 Tanner                       2300            5
            851 Brown                        2300            5
            850 Finney                       2300            5
            830 Dutt                         3500            7
            831 Bel Geddes                   3500            7
            832 Spacek                       3500            7
            838 Nicholson                    3500            7
            839 Johnson                      3500            7
            833 Moranis                      3500            7
            834 Idle                         3500            7
            845 Fawcett                      5000           11
            846 Brando                       5000           11
            847 Streep                       5000           11

     


      --------------------------------------------  

    오라클 SQL 함수(Oracle SQL Function) 목록 리스트 링크

     

    [SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE]
    SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트 링크
    반응형

    댓글