GROUPING SETS는 SQL에서 여러 그룹화 결과를 한 번의 쿼리로 구할 수 있게 해주는 기능입니다.
이 기능은 다양한 그룹화 조건에 대한 집계 결과를 동시에 계산하는 데 유용합니다.
GROUPING SETS 기본 개념GROUPING SETS는 여러 개의 GROUP BY 구문을 하나의 쿼리에서 동시에 수행할 수 있도록 해줍니다.
즉, 서로 다른 집계 수준을 동시에 구할 수 있도록 하여 복잡한 쿼리를 단순화할 수 있습니다.
예를 들어, sales 테이블에서 product와 region에 따른 매출을 구하려고 할 때, 각각의 그룹화뿐만 아니라 전체 매출과 product와 region에 상관없는 합계를 구하고 싶다고 가정합시다.
SELECT
product,
region,
SUM(sales_amount)
FROM
sales
GROUP BY
GROUPING SETS (
(product, region), -- (product, region)별 합계
(product), -- product별 합계
(region), -- region별 합계
() -- 전체 합계
);
GROUPING SETS 설명(product, region) — product와 region을 기준으로 그룹화된 매출 합계를 구합니다.(product) — product만 기준으로 그룹화된 매출 합계를 구합니다.(region) — region만 기준으로 그룹화된 매출 합계를 구합니다.() — 전체 테이블을 기준으로, 모든 데이터를 합친 합계를 구합니다.GROUPING SETS의 결과+---------+---------+-------------------+
| product | region | SUM(sales_amount) |
+---------+---------+-------------------+
| A | North | 1000 |
| A | South | 1500 |
| A | NULL | 2500 | -- product A의 전체 합계
| B | North | 800 |
| B | South | 1200 |
| B | NULL | 2000 | -- product B의 전체 합계
| NULL | North | 1800 | -- North region의 합계
| NULL | South | 2700 | -- South region의 합계
| NULL | NULL | 4500 | -- 전체 합계
+---------+---------+-------------------+
GROUPING SETS를 사용하는 이유GROUPING SETS는 여러 집계 조건을 한 번에 처리할 수 있기 때문에, 여러 번 GROUP BY를 사용하는 것보다 성능상 유리하고 코드도 간결해집니다.
또한, ROLLUP이나 CUBE와 비슷한 방식으로 다양한 집계 결과를 쉽게 구할 수 있습니다.
ROLLUP과 CUBE와의 차이점ROLLUP은 계층적 집계를 제공하며, 상위 수준의 그룹화 결과를 포함합니다.
예: (product, region) → (product) → 전체
CUBE는 모든 가능한 조합을 포함한 집계 결과를 제공합니다.
예: (product, region), (product), (region), 전체
GROUPING SETS는 명시적으로 원하는 그룹화 집합만 선택할 수 있습니다.
예: (product, region), (product), (region), 전체
GROUPING SETS는 한 번의 쿼리로 여러 그룹화 조건에 대한 집계 결과를 동시에 구할 수 있게 해주는 SQL 기능입니다.ROLLUP과 CUBE는 각각 계층적, 모든 가능한 조합의 집계를 제공합니다.GROUPING SETS는 필요한 그룹화 집합만 지정하여 유연하고 효율적으로 집계 결과를 가져올 수 있습니다.