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), ());
  • 括弧で囲まれた列名が1つの集計レベルを表す。
  • 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 操作。
  • ピボットテーブルの情報を1つのクエリにまとめる。
  • このクエリは 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...