「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。データ分析・語学に力点を置いています。 →現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年1月21日改訂)。

MENU

データベースとSQL(05/20)

はじめに

 データ分析を行う場合、データの管理運用、蓄積も重要な論点となる。そのためにはSQLやデータベースの知識が求められる。そこでまずは

を基にSQLの勉強をしていく。

4. テーブルの集約と検索

  • テーブルの列の合計値や平均値などの集計を行うには集約関数を用いる。
  • 集約関数は基本的に\mathrm{NULL}を除外して集計する。ただし\mathrm{COUNT}関数は\mathrm{COUNT(*)}とすれば\mathrm{NULL}を除外した全行数を数える。
  • 重複値を除外して集計するには\mathrm{DISTINCT}キーワードを用いる。

4.1 集約関数

 \mathrm{SQL}でデータに対して何らかの操作や計算を行うには関数を用いる。差し当たり5つを紹介する:

   \mathrm{COUNT} テーブルのレコード数(行数)を数える。
   \mathrm{SUM} テーブルの数値列のデータを合計する。
   \mathrm{AVG} テーブルの数値列のデータの平均を取る。
   \mathrm{MAX} テーブルの任意の列のデータの最大値を取る。
   \mathrm{MIN} テーブルの任意の列のデータの最小値を取る。

 このような集計用の関数を集約関数または集合関数と呼ぶ。

-- COUNT関数の使い方1:全行を数える
SELECT COUNT(*)
FROM <テーブル名>

-- COUNT関数の使い方2:特定列についてNULLを除外して行数を数える
SELECT COUNT(列名)
FROM <テーブル名>

-- COUNT関数の使い方3:重複値を除外して行数を数える
SELECT COUNT(DISTINCT 列名)
FROM <テーブル名>

-- SUM関数:NULLは自動的に除外
SELECT SUM(列名)
FROM <テーブル名>

-- AVG関数:NULLは自動的に除外
SELECT AVG(列名)
FROM <テーブル名>

-- MAX関数:NULLは自動的に除外
SELECT MAX(列名)
FROM <テーブル名>

-- MIN関数:NULLは自動的に除外
SELECT MIN(列名)
FROM <テーブル名>

4.2 テーブルの切り分け

  • 集約関数と\mathrm{GROUP\ BY}句を併用することでテーブルを指定して列ごとに切り分けて集約できる。
  • 集約キーに\mathrm{NULL}が含まれる場合、集約結果にも「不明」行として現れる。
  • 集約関数と\mathrm{GROUP\ BY}句を併用する場合、4点の注意事項がある:

      ①\mathrm{SELECT}句に書けるものは限定されている

      ②\mathrm{GROUP\ BY}句には\mathrm{SELECT}句で付けた列の別名は使えない。

      ③\mathrm{GROUP\ BY}句は集約結果をソートしない

      ④\mathrm{WHERE}句に集約関数を書くことはできない

4.2.1 GROUP BY

 \mathrm{GROUP\ BY}句でグループごとに操作を行うことができる。\mathrm{GROUP\ BY}句は必ず\mathrm{FROM}句(\mathrm{WHERE}句があればそれ)よりも後ろに置くというルールになっている。
 集計に当たっては\mathrm{NULL}も1つの値と見なされる。

-- GROUP BY句による集計
SELECT <列名1>,<列名2>,…
FROM <テーブル名>
GROUP BY <列名1>,<列名2>,…

-- GROUP BY句による集計例:ある列の値について個数を数える
SELECT A1,COUNT(*)
FROM <テーブル名>
GROUP BY A1
4.2.2 WHERE句を使った場合のGROUP BYの動作

 \mathrm{GROUP\ BY}句に\mathrm{WHERE}句を併用した場合、まずは\mathrm{WHERE}句で指定した条件でレコードが絞り込まれた後に\mathrm{GROUP\ BY}句により集約が行われる。

4.2.3 GROUP BY句を用いるときの注意
  • 集約関数を用いるときは①定数、②集約関数、③\mathrm{GROUP BY}句で指定した列名*1しか\mathrm{SELECT}句に書けない
  • \mathrm{GROUP BY}句では\mathrm{SELECT}句で\mathrm{AS}を用いて指定した名称は利用できない
  • \mathrm{GROUP BY}句は結果の順序をソートしない
  • 集約関数は\mathrm{SELECT}句または\mathrm{HAVING}句以外ではエラーになる

*1:集約キーという。

プライバシーポリシー お問い合わせ