7. グループ化と集約
GROUP BYSQL によるグループ化と
集約、データの分析
1
金子邦彦
(データベース演習)
URL: https://www.kkaneko.jp/de/de/index.html
SQLコマンドの習得
グループ化と集約によるデータの把握
実践的なデータ分析
2
7-1. イントロダクション
3
リレーショナルデータベースの仕組み
データをテーブルと呼ばれる表形式で保存
テーブル間関連で結ばれる。複雑な構造を持ったデータ
を効率的に管理することを可能に。
4
関連
集約
5
AVG, MAX, MIN, SUM: 平均、最大、最小、合計
COUNT: 行数
名前
得点
居室
徳川家康
85
1
源義経
78
2
西郷隆盛
90
3
豊臣秀吉
82
1
織田信長
75
2
記録 SELECT AVG(得点)FROM 記録;
82
SELECT MAX(得点)FROM 記録;
90
SELECT MIN(得点)FROM 記録;
75
SELECT SUM(得点)FROM 記録;
410
グループ化
グループ化は、同じ属性値を共有するデータ集めるプロ
セス。
例:科目の「国語」、「算数」、「理科」でグループ化
例:受講者の「A」、「B」でグループ化
それぞれの値ごとにグループに分ける 6
科目 受講者 得点
国語
A
85
国語
B
90
算数
A
90
算数
B
96
理科
A
95
科目 受講者 得点
国語
A
85
国語
B
90
算数
A
90
算数
B
96
理科
A
95
科目
受講者
得点
国語
A
国語
B
科目
得点
理科
科目
得点
算数
算数
科目
受講者
得点
国語
A
85
算数
A
90
理科
A
95
科目
受講者
得点
国語
B
90
算数
B
96
グループ化と集約
成績表には科目、受講者、得点が記載されている
科目の「国語」のグループ
同様に、「算数」、「理科」のグループを形成
7
科目 受講者 得点
国語
A
85
国語
B
90
算数
A
90
算数
B
96
理科
A
95
科目
得点
国語
国語
科目
得点
理科
科目
得点
算数
算数
「国語」のグループを作ることにより国語の得点が見や
すくなった
グループで、集約(行数、平均、合計など)を実施
8
科目 受講者 得点
国語
A
85
国語
B
90
算数
A
90
算数
B
96
理科
A
95
科目
得点
国語
国語
元データ
「国語」のグループ
科目
得点
国語
国語
「国語」のグループ
行数:2 (受講者数を表す)
平均:87.5
合計:175
グループ化と集約
グループ化
GROUP BY は、特定の属性(「科目」、「受講者」)を
基準として、グループ化を行
集約GROUP BY組み合わせることで、グループごとの
集約結果を得ることができる
9
GROUP BY の役割と書き方
SQL 問い合わせSELECT …」の中で、GROUP BY を使
用してデータをグループ化
1つ以上の属性を GROUP BY に指定してグループ化の基
準とする。
SELECT 科目, COUNT(*) FROM 成績 GROUP BY 科目;
10
すべての科目ごとに、受講者の数を計
グループ化と分析の基本
グループ化と集約
概要(例:行数、平均、合計)の生成
データ分析
グループ化と集約を用いて、カテゴリ別、時系列別などの
データ分析を実施
ビジネスインテリジェンス
売上のトレンド分析や顧客セグメント分析など、ビジネス
意思決定に役立つ分析を実施
データの可視化
グループ化と集約ののち、チャートやグラフで情報を視覚
的に表現
11
7-2. 演習
12
いまから演習で行こと、注意点
次のテーブルを作成
Access での注意点】
SQLビューでは、SQL文を1つずつ実行
(複数まとめての一括実行ができない)
CREATE TABLE では、「実行」の後、画面が変化しない
が実行できている
INSERT INTO では、「実行」の後、確認表示が出る。そ
の後、画面が変化しないが実行できている 13
演習1.Access SQL
ビューを用いたテーブル定
とデータの追加
トピックス
SQLビューを開く
SQL文の編集
create table
insert into
SQL文の実行
14
演習
1. パソコンを使用する
前もって Access をインストールしておくこと
2. Access 起動する
3. Access で、「空のデータベース」を選び、「作成」を
クリック.
15
4. テーブルツール画面が表示されることを確認
16
5. 次の手順で、SQLビューを開く.
17
デザイン」タブで、「
」を展開し「SQL
ビュー」を選ぶ
作成」タブで、
クエリデザイン
をクリック
このような
表示が出た
ときは
閉じる」を
クリック
18
6. SQL ビューに、次の SQL を1つずつ入れ、「実行」ボ
タンで、SQLを実行.結果を確認
CREATE TABLE 成績 (
科目 TEXT,
受講者 TEXT,
得点 INTEGER);
INSERT INTO 成績 VALUES('国語', 'A', 85);
INSERT INTO 成績 VALUES('国語', 'B', 90);
INSERT INTO 成績 VALUES('算数', 'A', 90);
INSERT INTO 成績 VALUES('算数', 'B', 96);
INSERT INTO 成績 VALUES('理科', 'A', 95);
INSERT INTOでは、「実行」の後、確認
表示が出る。その後、画面が変化しない
が実行できている
間違ってしまったときは、テーブルの削除
を行ってからやり直した方が早い場合がある
19
テーブルビューで、削除した
いテーブルを右クリックして、
削除
テーブルを削除するときは、
間違って必要なテーブルを削除しない
ように、十分に注意する!
(元に戻せない)
演習2.SQL によるグループ
化と集約. Access SQL
ビューを使用.
トピックス
1. グループ化
2. 集約
3. GROUP BY
4. AVG
5. COUNT(*)
6. SUM
20
Access SQL ビューを用いた問い合わせ
Access SQLビュー開く
SQL 編集select, from, where を使用
: select * from テーブル名 where 1 = 1;
SQL 実行
実行の結果、データシートビューに画面が変わり、そこに
問い合わせの結果が表示される
さらにSQL 文の編集、実行を続ける場合には、画面を
SQL ビューに切り替える
21
22
SQL 問い合わせ(クエリ)で使用する2つのビュ
SQL ビュー
SQL 文の作成編集 データシートビュー
問い合わせ(クエリ)
結果
実行
表示 + SQL ビュー
マウス操作でビューを切り替え
1. 次の手順で、SQLビューを開く.
23
デザイン」タブで、「
」を展開し「SQL
ビュー」を選ぶ
作成」タブで、
クエリデザイン
をクリック
このような
表示が出た
ときは
閉じる」を
クリック
24
2. SQL ビューに、次の SQL を1つずつ入れ、「
」ボタンで、SQLを実行.結果を確認
1. 単純な表示
SELECT * FROM 成績;
2. 得点の平均
SELECT AVG(得点) FROM 成績;
25
(続き)
3. 国語の得点の平均
SELECT AVG(得点) FROM 成績 WHERE 科目 = '国語’;
4. それぞれの科目の受講者数
SELECT 科目, COUNT(*) FROM 成績 GROUP BY 科目;
26
(続き)
5.それぞれの科目の平均得点
SELECT 科目, AVG(得点) FROM 成績 GROUP BY 科目;
6. それぞれの科目について、得点が90以上である受講者数
SELECT 科目, COUNT(*) FROM 成績 WHERE 得点 >= 90 GROUP BY 科目;
27
(続き)
7. それぞれの受講者が受講している科目数
SELECT 受講者, COUNT(*) FROM 成績 GROUP BY 受講者;
8.それぞれの受講者の得点合計
SELECT 受講者, SUM(得点) FROM 成績 GROUP BY 受講者;
28
(続き)
9. それぞれの受講者の得点平均
SELECT 受講者, AVG(得点) FROM 成績 GROUP BY 受講者;
7-3. 実データを用いた演習
29
演習の目的と形式
目的:実データを使い、グループ化と集約の有用
性を確認する。SQLのスキルアップも行
形式:自習形式(資料を見ながら各自実施してく
ださ
30
演習の内容
31
調査に協力した人たちの
齢分布は?
教育と年収の関係を見る
SQL を用いたグループ化と集約、そのバリエーションと有用
性を知る
成人調査データを利用
実演・実習で使データベース
データの出典:Lichman, M. (2013).
UCI Machine Learning Repository [http://archive.ics.uci.edu/ml].
Irvine, CA: University of California, School of Information and Computer Science (米国)
32
このデータを使います
(演習では、特定の職業、学歴、性別、母国を差別的に見ないようにしてください)
米国成人調査データ
(1994年、米国における統計調査データのうち 32561 人分)
演習用のデータベースファイル
演習用の Access データベースファイル
セレッソの利用者は,セレッソからもダンロード可能
ファイル名: db4-4.accdb
コンテンツの有効化」のメッセージが出たときは、確認
え、次にすすむ
つぎのよな表示が出たときは、確認のえ、「はい
33
米国成人調査データ
34
SQLビューで次を実行し、結果を確認
調査に協力した人たちの年齢分布は?
35
SELECT 年齢, count(*)
FROM 米国成人調査データ
GROUP BY 年齢;
SQLビューで次を実行し、結果を確認
調査に協力した人たちの教育の分布は?
36
SELECT 教育, count(*)
FROM 米国成人調査データ
GROUP BY 教育;
SQLビューで次を実行し、結果を確認
調査に協力した人たちの週当たり労働時間の分布は?
37
SELECT 週当たり労働時間, count(*)
FROM 米国成人調査データ
GROUP BY 週当たり労働時間;
SQLビューで次を実行し、結果を確認
年収5万ドル以上の人とそでない人の人数
38
SELECT 年収5万ドル以上か, count(*)
FROM 米国成人調査データ
GROUP BY 年収5万ドル以上か;
SQLビューで次を実行し、結果を確認
39
SELECT 教育, 年収5万ドル以上か, count(*)
FROM 米国成人調査データ
GROUP BY 教育, 年収5万ドル以上か;
教育と年収の関係を見る
SQLコマンドの習得
SQLを学ぶことで、データベース内の情報を整理し、必要な
データを効率的に抽出する能力が身につく。
グループ化と集約によるデータの把握
同じ属性を持つデータをグループ化し、AVG, SUM, COUNT
などの集約を用いてそれぞれのグループの平均値、合計、行
数などを求める。そのことで、データ全体の傾向を理解し、
意味のある洞察を得る。
実践的なデータ分析
集約されたデータを用いて、実際のデータ分析を行い、ビジ
ネスインテリジェンスの観点から売上のトレンドや顧客セグ
メント分析を実施することが可能になる。このスキルは、リ
レーショナルデータベースを使用した実践的な問題解決に活
用できる。
40
自習1.テーマ: 科目別の平均得点の計算
目的: GROUP BY を使用して、科目ごとに平均得点を計算す
る方法を学ぶ。
成績テーブルから、科目ごとに平均得点を計算するSQ文を
書いてください。
ヒント: AVG GROUP BY を組み合わせて使用し、科目
グループ化します。
41
自習2.テーマ:得点が90点以上の受講者数の計算
特定の得点基準を満たす受講者の数を科目ごとに調べる。
各科目について、得点が90点以上である受講者数をカ
トするSQL文を書いてください。
ヒント: WHERE を使って得点が90点以上のものを選択。
GROUP BY で科目ごとにグループ化します。
42
自習1の正解例
SELECT 科目, AVG(得点) FROM 成績 GROUP BY
科目;
自習2の正解例
SELECT 科目, COUNT(*) FROM 成績 WHERE 得点
>= 90 GROUP BY 科目;
43