OLAP 연산: GROUPING SETS

SQL로 하는 데이터 기반 의사결정

Irene Ortner

Data Scientist at Applied Statistics

SQL OLAP 연산자 개요

OLAP 연산을 위한 SQL 확장 기능

  • GROUP BY CUBE
  • GROUP BY ROLLUP
  • GROUP BY GROUPING SETS
SQL로 하는 데이터 기반 의사결정

renting_extended 테이블

renting_extended 테이블의 처음 몇 행:

| renting_id | country  | genre  | rating |
|------------|----------|--------|--------|
| 2          | Belgium  | Drama  | 10     |
| 32         | Belgium  | Drama  | 10     |
| 203        | Austria  | Drama  | 6      |
| 292        | Austria  | Comedy | 8      |
| 363        | Belgium  | Drama  | 7      |
| .......... | ........ | ...... | ...... |
SQL로 하는 데이터 기반 의사결정

GROUP BY GROUPING SETS

GROUPING SETS 연산자를 사용한 쿼리 예시:

SELECT country, 
       genre, 
       COUNT(*)
FROM rentings_extended
GROUP BY GROUPING SETS ((country, genre), (country), (genre), ());
  • 괄호로 묶인 컬럼 이름은 하나의 집계 수준을 나타냅니다.
  • GROUP BY GROUPING SETS는 여러 GROUP BY 쿼리의 UNION을 반환합니다.
SQL로 하는 데이터 기반 의사결정

GROUPING SETS와 GROUP BY 쿼리

SELECT country, 
       genre, 
       COUNT(*)
FROM renting_extended
GROUP BY GROUPING SETS (country, genre);
  • 국가와 장르의 고유 조합별 영화 대여 건수를 집계합니다.
  • GROUPING SETS의 표현식: (country, genre)
SELECT country, 
       genre, 
       COUNT(*)
FROM renting_extended
GROUP BY country, genre;
| country | genre  | count  |
|---------|--------|--------|
| Austria | Comedy | 2      |
| Belgium | Drama  | 15     |
| Austria | Drama  | 4      |
| Belgium | Comedy | 1      |
SQL로 하는 데이터 기반 의사결정

GROUPING SETS와 GROUP BY 쿼리

SELECT country, COUNT(*)
FROM renting_extended
GROUP BY GROUPING SETS (country);
  • 국가별 영화 대여 건수를 집계합니다.
  • GROUPING SETS의 표현식: (country)
SELECT country, COUNT(*)
FROM renting_extended
GROUP BY country;
| country | count |
|---------|-------|
| Austria | 16    |
| Belgium | 6     |
SQL로 하는 데이터 기반 의사결정

GROUPING SETS와 GROUP BY 쿼리

SELECT genre, COUNT(*)
FROM renting_extended
GROUP BY GROUPING SETS (genre);
  • 장르별 영화 대여 건수를 집계합니다.
  • GROUPING SETS의 표현식: (genre)
SELECT genre, COUNT(*)
FROM renting_extended
GROUP BY genre;
| country | count |
|---------|-------|
| Comedy  | 3     |
| Drama   | 19    |
SQL로 하는 데이터 기반 의사결정

GROUPING SETS와 GROUP BY 쿼리

SELECT COUNT(*)
FROM renting_extended
GROUP BY GROUPING SETS ();
  • 전체 집계 - 모든 영화 대여 건수를 집계합니다.
  • GROUPING SETS의 표현식: ()
SELECT COUNT(*)
FROM renting_extended;
| count |
|-------|
| 22    |
SQL로 하는 데이터 기반 의사결정

GROUP BY GROUPING SETS 표기법

  • GROUP BY GROUPING SETS (...)
    SELECT country, genre, COUNT(*)
    FROM renting_extended
    GROUP BY GROUPING SETS ((country, genre), (country), (genre), ());
    
  • 앞선 4개 쿼리의 UNION.
  • 피벗 테이블의 모든 정보를 하나의 쿼리로 결합.
  • 이 쿼리는 GROUP BY CUBE (country, genre)와 동일합니다.
SQL로 하는 데이터 기반 의사결정

GROUPING SETS 연산자 결과

SELECT country, genre, COUNT(*)
FROM renting_extended
GROUP BY GROUPING SETS ((country, genre), (country), (genre), ());
| country | genre  |count|
|---------|--------|-----|
| NULL    | NULL   | 22  |
| Austria | Comedy | 2   |
| Belgium | Drama  | 15  |
| Austria | Drama  | 4   |
| Belgium | Comedy | 1   |
| Belgium | NULL   | 16  |
| Austria | NULL   | 6   |
| NULL    | Comedy | 3   |
| NULL    | Drama  | 19  |
SQL로 하는 데이터 기반 의사결정

대여 건수 및 평균 평점 계산

  • 선택한 집계만 결합:
    • 국가 및 장르
    • 장르
  • 집계 기준: 영화 대여 건수 및 평균 평점
    SELECT country, 
         genre, 
         COUNT(*), 
         AVG(rating) AS avg_rating
    FROM renting_extended
    GROUP BY GROUPING SETS ((country, genre), (genre));
    
SQL로 하는 데이터 기반 의사결정

대여 건수 및 평균 평점 계산

SELECT country, genre, COUNT(*), AVG(rating) AS avg_rating
FROM renting_extended
GROUP BY GROUPING SETS ((country, genre), (genre));
| country | genre  | count| avg_rating |
|---------|--------|------|------------|
| Austria | Comedy | 2    | 8.00       |
| Belgium | Drama  | 15   | 9.17       |
| Austria | Drama  | 4    | 6.00       |
| Belgium | Comedy | 1    | NULL       |
| NULL    | Comedy | 3    | 8.00       |
| NULL    | Drama  | 19   | 8.38       |
SQL로 하는 데이터 기반 의사결정

연습해 봅시다!

SQL로 하는 데이터 기반 의사결정

Preparing Video For Download...