
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 | 




 
											 
											 
											 
											
최근댓글