はじめてのSQL:GROUP BY


GROUP BY を使うとグループごとにデータを集計して比較するといった、 データ分析でよく使うような処理を行うことができます。

目次

集約関数で集計する

まずGROUP BY の前に集約関数を解説します。
集約関数を使うとデータの集計を行うことができます。

よく使われる集計関数は下記になります。

集約関数
COUNT関数:データ数を返す
SUM関数  :合計値を返す
MAX関数  :最大値を返す
MIN関数  :最小値を返す
AVG関数  :平均値を返す

関数は値を返すのですが、カウント関数の場合はデータの数を返す、 SUM関数の場合は合計値を返す、といった働きをします。 今回も前回と同じテーブルを対象にしてSQLを実行します。

  • Purchase_log
  • product
  • user

テーブルの準備方法は前回の記事をご覧ください!

下記のSQLを実行してみます。

SELECT
    COUNT(*),
    SUM(age),
    MAX(age),
    MIN(age),
    AVG(age)
FROM
    user
  • 関数はキーワードの後に()がつきます ()の中には引数を入れます 例えばサム関数の引数にageを渡すと、ageの合計値を返すということになります
  • データ数を返すCOUNT 関数のみ引数に*(アスタリスク)を受けることができます
  • Ageなど列をしていすると、値が無い場合つまりNULLの場合は数えませんが、 *の場合はデータありなしに関わらず行数を返すことになります

結果は下記になります。

COUNT(*)SUM(age)MAX(age)MIN(age)AVG(age)
6196571932.6666666

ポイント

SQLではこのような集約関数で集計をおこなう データ分析の際は集計をよく行いますので、集約関数は必ず使えるようにしましょう。

GROUP BYでグループ化

GROUP BYの使い方を解説します。 GROUP BYを使うことで テーブルのデータを、グループ分けを行うことができます。

書式/コード

GROUP BY の書式は下記になります。

SELECT
    列名
FROM
    テーブル名
GROUP BY
    列名

GROUP BY の後に、グループにしたい列名を指定します。

下記のSQLを実行してみます。

SELECT
  sex,
  COUNT(*),
  SUM(age),
  AVG(age)
FROM
  user
GROUP BY
  sex
  • GROUP BY でsex列を指定しています、 つまり性別でグループをわけてデータ数や平均年齢を比較するというSQLになります
  • GROUP BY でグループごとにまとめたデータを取得することができます

結果は下記になります。

sexCOUNT(*)SUM(age)AVG(age)
女性38929.6666666
男性319735.6666666

ポイント

GROUP BYを使う際は SELECTに指定できるのはグループに指定した列や集約関数のみ、という点です。 それ以外例えば 、idを指定すると基本的にはエラーになります。 基本的にといいましたが、実はエラーになるかどうかはデータベースによります。 ちなみにSQLiteではエラーになりません。

よかったらシェアしてね!
  • URLをコピーしました!
目次