2020-09-20
こんにちは、0371です。
今回は、SQLのお勉強をしたいと思います。
基本情報技術者試験で出題される範囲を中心に進めます。
※ PostgreSQLはインストール済みかつ、パスも通しているという前提で進めていきます。
分からないという方は、以下の記事から始めてください。
dockerを使って、再構築が容易なSQLの練習場を作成する
"https://0371.blog/docker-sql"
前回の記事はこちら
SQLのお勉強 11.group by
"https://0371.blog/sql-11"
集約関数と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"