PostgreSQL ROLLUP을 사용하여 여러 그룹화 집합을 생성 하는 방법

 

그룹화 집합은 그룹화하는 기준이 되는 열 집합입니다.

CUBE하위 절과 달리 ROLLUP지정된 열을 기반으로 가능한 모든 그룹화 집합을 생성하지 않습니다.

입력 열 사이의 계층 구조를 가정하고 메이크업 감각은 계층 구조를 고려하는 모든 그룹화 집합을 생성합니다. 

보고서의 소계와 총계를 생성하는 데 자주 사용됩니다.

 

예를 들어, CUBE (c1,c2,c3)8개의 가능한 그룹화 집합을 모두 만듭니다.

(c1, c2, c3)
(c1, c2)
(c2, c3)
(c1,c3)
(c1)
(c2)
(c3)
()

그러나 ROLLUP(c1,c2,c3)계층 구조 c1 > c2 > c3가 다음과 같다고 가정하면 4개의 그룹화 집합만 생성 합니다.

(c1, c2, c3)
(c1, c2)
(c1)
()

 

이외에도 year > month > date가 대표적입니다.

SELECT
    c1,
    c2,
    c3,
    aggregate(c4)
FROM
    table_name
GROUP BY
    ROLLUP (c1, c2, c3);

 

- 부분 롤업도 가능합니다.

SELECT
    c1,
    c2,
    c3,
    aggregate(c4)
FROM
    table_name
GROUP BY
    c1, 
    ROLLUP (c2, c3);

 


 

반응형

 

DROP TABLE IF EXISTS sales;
CREATE TABLE sales (
    brand VARCHAR NOT NULL,
    segment VARCHAR NOT NULL,
    quantity INT NOT NULL,
    PRIMARY KEY (brand, segment)
);

INSERT INTO sales (brand, segment, quantity)
VALUES
    ('ABC', 'Premium', 100),
    ('ABC', 'Basic', 200),
    ('XYZ', 'Premium', 100),
    ('XYZ', 'Basic', 300);
-- ROLLUP절을 사용하여 브랜드(소계) 및 모든 브랜드 및 세그먼트(총계)별로 판매된 제품 수를 찾습니다.
SELECT
    brand,
    segment,
    SUM (quantity)
FROM
    sales
GROUP BY
    ROLLUP (brand, segment)
ORDER BY
    brand,
    segment;

- 세 번째 행은 ABC브랜드 매출을 나타내고 여섯 번째 줄은 XYZ브랜드 매출을 나타냅니다.

- 마지막 행은 모든 브랜드 및 세그먼트에 대한 총계를 보여줍니다.

- brand > segment 계층입니다.

 

- 계층 순서를 바꾸어봅시다.

SELECT
    segment,
    brand,
    SUM (quantity)
FROM
    sales
GROUP BY
    ROLLUP (segment, brand)
ORDER BY
    segment,
    brand;

 

- 부분 롤업을 수행

SELECT
    segment,
    brand,
    SUM (quantity)
FROM
    sales
GROUP BY
    segment,
    ROLLUP (brand)
ORDER BY
    segment,
    brand;

 

- 일 월 연도 별 순서 

SELECT
    EXTRACT (YEAR FROM rental_date) y,
    EXTRACT (MONTH FROM rental_date) M,
    EXTRACT (DAY FROM rental_date) d,
    COUNT (rental_id)
FROM
    rental
GROUP BY
    ROLLUP (
        EXTRACT (YEAR FROM rental_date),
        EXTRACT (MONTH FROM rental_date),
        EXTRACT (DAY FROM rental_date)
    );

반응형

'SW ENGINEERING > Postgres' 카테고리의 다른 글

[PostgreSQL] BASIC - ANY  (0) 2021.09.03
[PostgreSQL] BASIC - Subquery  (0) 2021.09.03
[PostgreSQL] BASIC - CUBE  (0) 2021.09.03
[PostgreSQL] BASIC - Grouping Sets  (0) 2021.09.03
[PostgreSQL] BASIC - EXCEPT  (0) 2021.09.03
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기