GROUPING SETS와 동등한 연산자

GROUPING SETS를 사용하는 GROUP BY 절은 여러 GROUP BY 절의 UNION ALL로 생성되는 것과 동일한 결과 집합을 생성할 수 있습니다. GROUPING SETS는 GROUP BY, ROLLUP 또는 CUBE 연산으로 생성되는 것과 동일한 결과를 생성할 수 있습니다. GROUPING SETS, ROLLUP 또는 CUBE를 다양하게 조합하여 동일한 결과 집합을 생성할 수 있습니다.

이 항목에서는 GROUPING SETS와 동등한 연산자에 대한 예를 제공합니다. 다음은 이 항목의 예에서 사용되는 약어입니다.

  • Agg(): 임의의 집계 함수

  • (arg): 인수

UNION ALL과 동등한 GROUPING SETS 기능

GROUPING SETS(<그룹화 집합> [,...n])를 GROUP BY 목록으로 지정하는 것은 각각 그룹화 집합 중 하나를 해당 GROUP BY 목록으로 갖는 쿼리의 UNION ALL과 동일합니다. 부동 소수점 숫자에 대한 집계는 약간 다른 결과를 반환할 수 있습니다.

다음 문은 서로 동일합니다.

SELECT customer, year, SUM(sales)
FROM T
GROUP BY GROUPING SETS ((customer), (year))
SELECT customer, NULL as year, SUM(sales)
FROM T 
GROUP BY customer
UNION ALL
SELECT NULL as customer, year, SUM(sales)
FROM T 
GROUP BY year

단순 GROUP BY와 동일한 GROUPING SETS 기능

다음 절은 동일한 총합계를 반환합니다.

GROUP BY GROUPING SETS ( () )
GROUP BY ()

다음 절은 동일한 단일 집합을 반환합니다.

GROUP BY GROUPING SETS ( (C1, C2, ..., Cn) )
GROUP BY C1, C2, ..., Cn

GROUPING SETS ROLLUP과 동등한 연산자

입력 목록에서 n 차원이 있는 GROUP BY ROLLUP(<복합 요소 목록>)은 해당 입력 목록의 모든 접두사(n+1)를 해당 GROUPING SETS로 갖는 GROUPING SETS와 동일합니다.

다음 절은 서로 동일합니다.

GROUP BY ROLLUP (C1, C2, …, Cn-1, Cn)
GROUP BY GROUPING SETS ( (C1, C2, …, Cn-1, Cn)
    ,(C1, C2, ..., Cn-1)
    ...
    ,(C1, C2)
    ,(C1)
    ,() )

GROUPING CUBE와 동일한 기능의 항목

입력 목록에서 n 차원이 있는 GROUP BY CUBE(<복합 요소 목록>)는 해당 입력 목록의 전체 집합(입력 목록에 있는 차원의 2n 조합)을 해당 GROUPING SETS로 갖는 GROUPING SETS와 동일합니다.

다음 절은 서로 동일합니다.

GROUP BY CUBE (C1, C2, C3, ..., Cn-2, Cn-1, Cn)
GROUP BY GROUPING SETS (
     (C1, C2, C3, ..., Cn-2, Cn-1, Cn) -- All dimensions are included.
    ,( , C2, C3, ..., Cn-2, Cn-1, Cn) -- n-1 dimensions are included.
    ,(C1, C3, ..., Cn-2, Cn-1, Cn)
    …
    ,(C1, C2, C3, ..., Cn-2, Cn-1,)
    ,(C3, ..., Cn-2, Cn-1, Cn) -- n-2 dimensions included
    ,(C1  ..., Cn-2, Cn-1, Cn)
    …
    ,(C1, C2) -- 2 dimensions are included.
    ,…
    ,(C1, Cn)
    ,…
    ,(Cn-1, Cn)
    ,…
    ,(C1) -- 1 dimension included
    ,(C2)
    ,…
    ,(Cn-1)
    ,(Cn)
    ,() ) -- Grand total, 0 dimension is included.

다음 절은 서로 동일합니다.

GROUP BY CUBE (C1, C2, C3)
GROUP BY GROUPING SETS ( (C1, C2, C3)
    ,(C1, C2)
    ,(C1, C3)
    ,(C2, C3)
    ,(C1)
    ,(C2)
    ,(C3)
    ,() )

ROLLUP 내에 그룹화 집합을 포함하는 ROLLUP의 복합 열

다음 절은 서로 동일합니다.

ROLLUP(A, (C1, C2, ..., Cn) )
ROLLUP( (A), (C1, C2, ..., Cn) )
GROUPING SETS ( (A, C1, C2, ..., Cn), (A), () )

CUBE 내에 그룹화 집합을 포함하는 CUBE의 복합 열

다음 절은 서로 동일합니다.

CUBE(A, (C1, C2, ..., Cn) )
CUBE( (A), (C1, C2, ..., Cn) )
GROUPING SETS ( (), (A), (C1, C2, ..., Cn), (A, C1, C2, ..., Cn) )

GROUPING SETS, ROLLUP 또는 CUBE를 포함하는 GROUP BY

다음 절은 서로 동일합니다.

GROUP BY A, CUBE (B, C)
GROUP BY GROUPING SETS ( (A), (A, B), (A, C), (A, B, C ))

다음 절은 서로 동일합니다.

GROUP BY A, GROUPING SETS ( (B), (C) )
GROUP BY GROUPING SETS ( (A, B), (A, C) )

다음 절은 서로 동일합니다.

GROUP BY ROLLUP (A, B), ROLLUP(C, D)
GROUP BY GROUPING SETS
    ( (),(C),(C,D),(A),(A,C),(A,C,D),(A,B),(A,B,C),(A,B,C,D) )

GROUPING SETS 목록에 포함된 ROLLUP

다음 절은 서로 동일합니다.

GROUP BY GROUPING SETS ( (A), ROLLUP (B, C) )
GROUP BY GROUPING SETS ( (A), (B,C), (B), () )

그룹화 집합 내에 포함된 ROLLUP

다음 절은 서로 동일합니다.

GROUP BY GROUPING SETS(A, (B, ROLLUP(C, D)) )
GROUP BY GROUPING SETS (A, B, (B,C), (B, C, D) () )