【SQL】『スッキリわかるSQL入門』6章の読書メモ

f:id:hira98:20190530154131j:plain

【結論】

  • SQLでは結果を集計するために集計関数が用意されている。
  • GROPU BYを用いることで集計単位を指定できる。
  • さらにHAVINGを使うことで、グループ化の条件を指定できる。

【目次】

集計関数とは

SQL文では列を表示するだけでなく、次のように実行結果を集計することも可能です。

SELECT SUM(1日のYoutube視聴時間) AS 合計,
       AVG(1日のYoutube視聴時間) AS 平均,
       MAX(1日のYoutube視聴時間) AS 最大,
       MIN(1日のYoutube視聴時間) AS 最小
  FROM 1週間のYoutube視聴時間記録表

実行結果は以下です。

合計 平均 最大 最小
13時間25分 1時間55分 5時間19分 37分

※上記例は自分への戒めとして出してます🙇‍♂️

集計対象の列の型による動作の違いは下表のとおりです。

関数名 数値型 文字列型 日付型
SUM 各数値値の合計 × ×
MAX 各数値値の最大 並び替えて最後の文字列 新しい日付
MIN 各数値値の最小 並び替えて最初の文字列 古い日付
AVG 各数値値の平均 × ×
COUNT 行数 行数 行数

※引用:『スッキリわかる SQL入門』P181

GROUP BY句

グループ単位で集計したい時に使います。

構文は以下です。

  SELECT グループ化の基準列名・・・、 集計関数
    FROM テーブル名
  (WHERE 絞り込み条件)
GROUP BY グループ化の基準列名・・・

注意点はグループ化の基準列名はGROUP BYSELECの両方に指定する必要があります。

以下のように、GROUP BYに指定していない列名2をSELECTに指定すると、列名2はグループ化した時にSQLが行の先頭と判断した列名2の値が出力されます。要は何が出力されるかは保証されません。

  SELECT 列名1, 列名2, SUM(列名3) AS 合計
    FROM テーブル名
  (WHERE 絞り込み条件)
GROUP BY 列名1

HAVING句

HAVING(ハビング)句は集計結果に対して条件による絞り込みを行いたい場合に使用します。

  SELECT グループ化の基準列名・・・、 集計関数
    FROM テーブル名
  (WHERE もとの表に対する絞り込み条件)
   GROUP BY グループ化の基準列名・・・
  HAVING 集計結果に対する絞り込み条件

上記SQL文は次のように解釈されます。

  1. FROMに記述されたテーブル情報を抽出(下図もとの表抜き出し処理)
  2. 検索テーブル情報から、WEHERで指定した行の内、SELECTで指定した列だけを抜き出す。(下図①)
  3. GROUP BYの指定に従ってグループ化する。(下図②)
  4. 集計関数で指定された列はグループごとに集計する。(下図③)
  5. HAVINGの指定に従って、集計結果を絞り込む。(下図④)

f:id:hira98:20190608193845j:plain

※引用:『スッキリわかる SQL入門』P189

参考情報

スッキリわかるSQL入門 ドリル215問付き! - インプレスブックス

さいごに

6/3(月)から脱ニートして現在、1ヶ月の研修期間中。ベテランエンジニアにいつでも質問できる環境で、お金もらいながら勉強させてもらえてる☺️