SQLのお勉強 11.group by

2020-09-19

こんにちは、0371です。

今回は、SQLのお勉強をしたいと思います。
基本情報技術者試験で出題される範囲を中心に進めます。

お勉強

※ PostgreSQLはインストール済みかつ、パスも通しているという前提で進めていきます。

分からないという方は、以下の記事から始めてください。

dockerを使って、再構築が容易なSQLの練習場を作成する
"https://0371.blog/docker-sql"

前回の記事はこちら

SQLのお勉強 10.集約関数
"https://0371.blog/sql-10"

group by

集約関数とgroup byを使用することで、テーブルを「商品分類ごと」や「登録日ごと」に切り分けて集約することができます。

group byは、fromwhereの後ろに記述してください。

以下のように使用します。

select 列名1, 列名2, 列名3 from テーブル名 group by 列名1, 列名2, 列名3;

下に例を挙げます。

select shohin_bunrui, count(*) from Shohin group by shohin_bunrui;

商品分類ごとに、count(*)が適応されます。

 shohin_bunrui | count 
---------------+-------
 キッチン用品  |     4
 衣服          |     2
 事務用品      |     2
(3 rows)

group bynullが入っていた場合は、nullも一つのグループとして取得します。

select shiire_tanka, count(*) from Shohin group by shiire_tanka;
 shiire_tanka | count 
--------------+-------
              |     2
          320 |     1
          500 |     1
         2800 |     2
         5000 |     1
          790 |     1
(6 rows)

whereと併用した場合はこうなります。

select shiire_tanka, shohin_bunrui, count(*) from Shohin where shohin_bunrui = '衣服' group by shiire_tanka, shohin_bunrui;

whereで「衣服」を抽出した後に、group byの切り分けが行われます。

 shiire_tanka | shohin_bunrui | count 
--------------+---------------+-------
          500 | 衣服          |     1
         2800 | 衣服          |     1
(2 rows)

試験対策的な覚え方になりますが、group byの中にない列名は、selectで指定できません。
また、selectの中にある列名は、全てgroup byの中にも記述しなければいけません。

覚えておくと良いでしょう。

また、group byにはasでつけた列の別名は使用できません。
PostgreSQLではエラーになりませんが、別のDBMSではエラーになるので、使わないようにしましょう。

今日はここまで。

参考書籍

SQL 第2版 ゼロからはじめるデータベース操作
"https://amzn.to/2QYMBJD"

今日の一言

group byが分かったのでSQLはマスターしたも同然!!!!

次回の記事はこちら

SQLのお勉強 12.having
"https://0371.blog/sql-12"