SQLのお勉強 12.having
こんにちは、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)
whereとhavingでは、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”