【SQL】『スッキリわかるSQL入門』6章の読書メモ
【結論】
- 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 BY
とSELEC
の両方に指定する必要があります。
以下のように、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文は次のように解釈されます。
- FROMに記述されたテーブル情報を抽出(下図もとの表抜き出し処理)
- 検索テーブル情報から、WEHERで指定した行の内、SELECTで指定した列だけを抜き出す。(下図①)
- GROUP BYの指定に従ってグループ化する。(下図②)
- 集計関数で指定された列はグループごとに集計する。(下図③)
- HAVINGの指定に従って、集計結果を絞り込む。(下図④)
※引用:『スッキリわかる SQL入門』P189
参考情報
スッキリわかるSQL入門 ドリル215問付き! - インプレスブックス
さいごに
6/3(月)から脱ニートして現在、1ヶ月の研修期間中。ベテランエンジニアにいつでも質問できる環境で、お金もらいながら勉強させてもらえてる☺️