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을 참조합니다.
실습용 테이블에 대해서는 3강을 참조하세요.
Do it! SQL을 찾아 주셔서 감사합니다. 공감 ♥ , 댓글이 큰 힘이 됩니다. |
'IT > SQL 기초강좌 (PostgreSQL)' 카테고리의 다른 글
30강 SQL이 뭐지? PostgreSQL ANY Operator (2) | 2022.12.20 |
---|---|
29강 SQL이 뭐지? PostgreSQL Subquery (2) | 2022.12.20 |
27강 SQL이 뭐지? PostgreSQL CUBE (2) | 2022.12.20 |
26강 SQL이 뭐지? PostgreSQL GROUPING SETS (3) | 2022.12.20 |
25강 SQL이 뭐지? PostgreSQL HAVING (2) | 2022.12.20 |
댓글