SQLのお勉強 12.having

2020-09-20

こんにちは、0371です。

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

お勉強

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

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

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

前回の記事はこちら

SQLのお勉強 11.group by
"https://0371.blog/sql-11"

having

集約関数とhavingを使用することで、集約後の結果に対する抽出条件を指定することができます。

havingは、group byの後ろに記述します。

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

select 列名1, 列名2, 列名3 from テーブル名 group by 列名1, 列名2, 列名3 having グループに対する条件;

下に例を挙げます。

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

count(*)が2の行だけを取得します。
キッチン用品の行は除外されていることが確認できます。

 shohin_bunrui | count 
---------------+-------
 衣服          |     2
 事務用品      |     2
(2 rows)

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

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

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

 shiire_tanka | shohin_bunrui | count 
--------------+---------------+-------
          500 | 衣服          |     1
(1 row)

wherehavingでは、whereの方が実行速度が早いです。

また、上の例のような、shohin_bunrui = '衣服'という条件は、whereにもhavingにもつけることができます。
しかし、shohin_bunrui = '衣服'は行に対しての条件指定ですので、whereに記述する方が良いでしょう。

今日はここまで。

参考書籍

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

今日の一言

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

次回の記事はこちら

SQLのお勉強 13.order by
"https://0371.blog/sql-13"