PostgreSQLで集約する
PostgreSQLで,テーブルから抽出したデータを集約するときのSQLの書き方です.
目次
集約関数
集約関数は基本的にNULLを無視します.
合計
集約関数SUM
により,対象カラムの合計値を出せます.
SELECT SUM(カラム名) FROM テーブル名; |
平均
集約関数AVG
により,対象カラムの平均を求めることができます.
SELECT AVG(カラム名) FROM テーブル名; |
NULL
が無視されるという集約関数の特性により,分母も適切に調整されます.
最大・最小
最大値と最小値を併記させるとすれば,次のように書きます.
SELECT MAX(カラム名), MIN(カラム名) FROM テーブル名; |
辞書式順序も認めるので,文字列型や日付型にも使うことができます.
個数
集約関数COUNT
でデータの個数を数えるには,
SELECT COUNT(カラム名) FROM テーブル名; |
とします.
出力結果は,集約関数の性質によりNULL
を除去した個数です.
COUNT(*)
を用いると,例外的にNULL
も含んだ個数を返します.
一意化した後で集約する場合
データを一意化した後で集約したい場合,集約関数の引数内でカラム名を修飾するようにDISTINCT
を配置します.
SELECT COUNT(DISTINCT カラム名) |
グループに分ける(GROUP BY句)
カラムを指定することで,そのカラムを断面としてデータを切り出します.
レコードはグループにまとめられてしまうので,SELECT
句で指定できるのは定数と集約キー,集約関数のみに限られることになります.
SELECT 定数か集約キーか集約関数 |
SELECT
句でつけた別名は使えません.
グループ分けしてから集約関数の処理に入るので,SELECT
で付ける別名にたどりついていないからです.
グループに条件を与える(HAVING句)
GROUP BY
句で作ったグループに対して課す条件を書きます.
定数と集約キー,集約関数のみ使えます.
SELECT 定数か集約キーか集約関数 |
HAVING
句もGROUP BY
句同様,SELECT
句でつけた別名は使えません.
ORDER BY句を使う場合の位置
ORDER BY
句が最後です.
SELECT 定数か集約キーか集約関数 |
参考文献
SQLの方言に配慮しつつ,リレーショナルデータベースの操作を一から説明している入門書です.
- ミック (2016)「SQL」第2版,翔泳社.