SQLのお勉強 10.集約関数

2020-09-18

こんにちは、0371です。

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

お勉強

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

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

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

前回の記事はこちら

SQLのお勉強 9.論理演算子
"https://0371.blog/sql-9"

集約関数

集約関数を使用することで、合計値や平均値などの集計操作をすることができます。

集約関数は、selecthavingorder byの三つでしか書くことができません。

使用できる集約関数は以下の通りです。

count // テーブルのレコード数を数える
sum   // テーブルの数値列のデータの合計を求める
avg   // テーブルの数値列のデータの平均を求める
max   // テーブルにある任意の列のデータの最大値を求める
min   // テーブルにある任意の列のデータの最大値を求める

countのみ、引数に*を指定することができます。

countを使用した例は以下の通りです。

select count(*), count(shohin_tanka) from Shohin;

*nullを含めて数えますが、列名を指定すると、nullを含めずに数えます。

 count | count 
-------+-------
     8 |     6
(1 row)

sumを使用した例は以下の通りです。

select sum(hanbai_tanka), sum(shiire_tanka) from Shohin;

sum関数では、nullを除外して計算します。

  sum  |  sum  
-------+-------
 16780 | 12210
(1 row)

avgを使用した例は以下の通りです。

select avg(hanbai_tanka), avg(shiire_tanka) from Shohin;

nullは分子からも分母からも除外されて計算されます。

          avg          |          avg          
-----------------------+-----------------------
 2097.5000000000000000 | 2035.0000000000000000
(1 row)

min, maxを使用した例は以下の通りです。

select min(hanbai_tanka), max(shiire_tanka), min(torokubi), max(torokubi), min(shohin_mei), max(shohin_mei) from Shohin;

min, maxは、数値のみではなく、日付や文字列に対しても有効です。
文字列の場合は、辞書型の最大値・最小値が取得されます。
ほぼ全てのデータ型に適応することが可能です。

 min | max  |    min     |    max     |   min   |     max      
-----+------+------------+------------+---------+--------------
 100 | 5000 | 2008-04-28 | 2009-11-11 | Tシャツ | 穴あけパンチ
(1 row)

重複値を除外して集約するには、distinctを使用します。 全ての集約関数に適応させることができます。

select count(distinct shohin_bunrui) from Shohin;

「衣服」、「事務用品」、「キッチン用品」の三種類なので、countは3になります。

 count 
-------
     3
(1 row)

今日はここまで。

参考書籍

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

今日の一言

集約関数が分かったのでSQLはマスターしたも同然!!!!

次回の記事はこちら

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