本記事では以下の集約関数を見ていきます.
<使用イメージ>
- 足し算:
SUM()
- データの個数確認:
COUNT()
- 平均:
AVG()
- 最大値:
MAX()
- 最小値:
MIN()
上記の関数は結果をひとつのデータとして返してきます.
例示を見ながら確認していきましょう.
PythonやPC関連の情報をまとめているブログです
本記事では以下の集約関数を見ていきます.
<使用イメージ>
SUM()
COUNT()
AVG()
MAX()
MIN()
上記の関数は結果をひとつのデータとして返してきます.
例示を見ながら確認していきましょう.
psql (PostgreSQL) 14.5
まずはサンプルのテーブルを作成します.
CREATE TABLE buncho (
id serial PRIMARY KEY, -- 番号
name VARCHAR (30) NOT NULL, -- お名前
age INTEGER NOT NULL, -- 年齢(歳)
weight DECIMAL(5, 2) NOT NULL, -- 体重(g)
birdseed DECIMAL(5, 2) NOT NULL -- 1日の餌の量(g)
);
INSERT INTO buncho (name, age, weight, birdseed)
VALUES
('ぶんぶん', 2, 21.3, 4),
('ピースケ', 1, 22.6, 4),
('シロ', 3, 23.7, 4),
('うずら', 1, 25.9, 6),
('らむね', 5, 24.0, 5),
('シルバー', 2, 23.5, 5)
;
SELECT * FROM buncho;
id | name | age | weight | birdseed |
---|---|---|---|---|
1 | ぶんぶん | 2 | 21.30 | 4.00 |
2 | ピースケ | 1 | 22.60 | 4.00 |
3 | シロ | 3 | 23.70 | 4.00 |
4 | うずら | 1 | 25.90 | 6.00 |
5 | らむね | 5 | 24.00 | 5.00 |
6 | シルバー | 2 | 23.50 | 5.00 |
SUM()
birdseed 列をすべて足します.
結果を見ると,足し算された結果が1つの値として返ってきていますね.
SELECT
SUM(birdseed)
FROM
buncho;
sum |
---|
28.00 |
COUNT()
データの個数をカウントします.
6つのデータ(行)がカウントされて返ってきました.
SELECT
COUNT(*) AS buncho_count
FROM
buncho;
buncho_count |
---|
6 |
注意
COUNT(*)
とすると要素がNULLであってもカウントして返してくれます.
特定の列を指定する場合はNULLをカウントせずに返してくれます.
AVG()
データの平均値を算出します.1
SELECT
ROUND(AVG(weight), 2) AS weight
FROM
buncho;
weight |
---|
23.50 |
MAX()
MIN()
データの最大値・最小値を表示してくれます.
SELECT
MAX(weight)
FROM
buncho;
max |
---|
25.90 |
SELECT
MIN(weight)
FROM
buncho;
min |
---|
21.30 |
ここではWHERE
句やGROUP BY
句,HAVING
句で条件を絞って集計する例を見てみます.
age(年齢)が1歳の文鳥だけに絞って集計してみます.
年齢が1歳の2羽におけるbirdseedを足した結果が返ってきていますね.
SELECT
SUM(birdseed)
FROM
buncho
WHERE
age = 1;
sum |
---|
10.00 |
GROUP BY
句でage(年齢)ごとにまとめて足し算してみましょう.
SELECT age,
SUM(birdseed)
FROM
buncho
GROUP BY
age
ORDER BY
age;
age | sum |
---|---|
1 | 10.00 |
2 | 9.00 |
3 | 4.00 |
5 | 5.00 |
今回はデータが少ないのであまりまとまっていませんが,それぞれの年齢ごとにbirdseedが集計されていることがわかりますね.
参考
クエリの最後にあるORDER BY
句はage列を基準に並び替えるために入れています.
上記のグループごとにまとめて足し算した結果のうち,birdseedが7以上のデータを抽出します.
このような場合にはHAVING
句に集約関数を記載します.
SELECT age,
SUM(birdseed) AS birdseed
FROM
buncho
GROUP BY
age
HAVING
SUM(birdseed) >= 7
ORDER BY
age;
age | birdseed |
---|---|
1 | 10.00 |
2 | 9.00 |
集約した結果に対し,さらに絞り込んだ結果を得ることができました!
SQLの集約関数について基本的な使い方を勉強しました.
ROUND(AVG(weight), 2)
としているのは,出力結果を小数点第二位までとするためです. ↩