본문 바로가기
IT/SQL 기초강좌 (PostgreSQL)

28강 SQL이 뭐지? PostgreSQL ROLLUP

by DoitSQL 2022. 12. 20.
728x90

28강 SQL이 뭐지? PostgreSQL ROLLUP   

PostgreSQL

SQL이 뭐지? 28강 시작합니다.

 

이번 강의에서는

 PostgreSQL ROLLUP

에 대해서 알아보겠습니다.

 

여러 그룹 집합을 생성하는 PostgreSQL ROLLUP에 대해서 알아봅니다.


Introduction to the PostgreSQL ROLLUP   

PostgreSQL ROLUP은 GROUP BY 절의 하위 절로, 여러 그룹 집합을 정의하기 위한 약어를 제공합니다. 그룹화 집합은 그룹화하는 기준이 되는 열 집합입니다. 

26강을 다시 한번 보시기 바랍니다.

CUBE 하위 절과 달리 ROLLUP은 지정된 열을 기준으로 가능한 모든 그룹화 집합을 생성하지 않습니다. 그것은 단지 그것들의 부분 집합을 만듭니다.

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)
()   

ROLLUP의 일반적인 용도는 계층 연도 > 월 > 날짜를 고려하여 연도, 월, 날짜별로 데이터의 집계를 계산하는 것입니다.

다음은 PostgreSQL ROLLUP의 구문을 보여줍니다. :

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);   


PostgreSQL ROLLUP examples   

26강, 27강에서 사용했던 sales 테이블을 실습에 사용합니다.

 

판매 테이블을 생성하지 않으셨다면, 다음 스크립트로 테이블 생성 후 진행합니다.

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);
COMMIT;

 

 

다음 쿼리는 ROLLUP 절을 사용하여 브랜드별(하위 총계) 및 모든 브랜드 및 세그먼트별(총계)로 판매된 제품 수를 찾습니다.   

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

출력을 보면 알 수 있듯이, 세 번째 행은 ABC 브랜드의 매출을 나타내고, 여섯 번째 행은 XYZ 브랜드의 매출을 나타냅니다. 마지막 행에는 모든 브랜드 및 세그먼트의 총합이 표시됩니다. 

이 예에서 계층은 브랜드 > 세그먼트입니다.

 

브랜드 및 세그먼트 순서를 변경하면 다음과 같이 결과가 달라집니다.   

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;   

 

DVDRENTAL 데이터베이스에서 다음 RENTAL 테이블을 참조하십시오.   

 

다음 문장은 ROLLUP를 사용하여 일, 월 및 연도별 대여 횟수를 찾습니다.   

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)
    );   

결과를 보시면, 일별, 월별, 연도별 집계를 보실 수 있습니다.


이번 시간에는 PostgreSQL ROLLUP을 사용해서 그룹 집합을 생성하는 방법을 배웠습니다.

 

수고하셨습니다.

다음 강의에서 만나요.


본 강의는 PostgreSQL Tutorial을 참조합니다. 

 

PostgreSQL Tutorial - Learn PostgreSQL from Scratch

Welcome to the PostgreSQLTutorial.com website! This PostgreSQL tutorial helps you understand PostgreSQL quickly. You’ll master PostgreSQL very fast through many practical examples and apply the knowledge in developing applications using PostgreSQL. If yo

www.postgresqltutorial.com

실습용 테이블에 대해서는 3강을 참조하세요.

 

3강 SQL이 뭐지? 도구들을 설치해보자. ( PostgreSQL, HeidiSQL )

지난 시간까지 SQL이 뭔지 대충 감을 잡는 시간을 가졌습니다. 이번 시간에는 본격적인 SQL을 공부하기 위해서 도구들을 설치해 보겠습니다. 1. PostgreSQL 설치 ( Windows10 64bit 기준) 2. He


Do it! SQL을 찾아 주셔서 감사합니다. 공감 ♥ , 댓글이 큰 힘이 됩니다.

 

 

728x90

댓글