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 |
최근댓글