前回は、日付関数について説明しました。今回は集約関数とGROUP BYについて説明します。この記事で紹介する関数でできることは「データのグループ化と集計で、データの件数、合計値、平均値、中央値、最大値、最小値を求める」ことができます。
データ準備
集約関数を試すためにテーブルを作成し、データを追加します。
-- テーブルの作成
-- 得点テーブル1
CREATE TABLE scores (
id INT PRIMARY KEY,
name VARCHAR(50),
gender VARCHAR(10),
subject VARCHAR(20),
score INT
);
-- データの登録
INSERT
ALL INTO scores
VALUES
(1, '田中', '男性', '国語', 70)
INTO
scores
VALUES
(2, '山田', '女性', '数学', 55)
INTO
scores
VALUES
(3, '佐藤', '男性', '英語', 80)
INTO
scores
VALUES
(4, '鈴木', '女性', '国語', 45)
INTO
scores
VALUES
(5, '高橋', '男性', '数学', 65)
INTO
scores
VALUES
(6, '伊藤', '女性', '英語', 75)
INTO
scores
VALUES
(7, '加藤', '男性', '国語', 85)
INTO
scores
VALUES
(8, '中島', '女性', '数学', 60)
INTO
scores
VALUES
(9, '林', '男性', '英語', 75)
INTO
scores
VALUES
(10, '渡辺', '女性', '国語', 70)
SELECT
*
FROM
DUAL;
No | 氏名 | 性別 | 科目 | 得点 |
---|---|---|---|---|
1 | 田中 | 男性 | 国語 | 70 |
2 | 山田 | 女性 | 数学 | 55 |
3 | 佐藤 | 男性 | 英語 | 80 |
4 | 鈴木 | 女性 | 国語 | 45 |
5 | 高橋 | 男性 | 数学 | 65 |
6 | 伊藤 | 女性 | 英語 | 75 |
7 | 加藤 | 男性 | 国語 | 85 |
8 | 中島 | 女性 | 数学 | 60 |
9 | 林 | 男性 | 英語 | 75 |
10 | 渡辺 | 女性 | 国語 | 70 |
GROUP BY句
集約関数は GROUP BY句 と一緒に使われることが多いです。GROUP BYはデータを任意のカラムの値に基づいてレコードをグループ化することができます。例えば、得点テーブルでテストを受けた男女別の人数を調べたいとします。
SELECT
GENDER AS "性別",
COUNT(GENDER) AS "人数"
FROM
SCORES
GROUP BY
GENDER;
性別 | 人数 |
---|---|
女性 | 5 |
男性 | 5 |
5人ずつテストを受けたことがわかりました。なんとなく使い方がイメージできたんじゃないでしょうか。
では、よく使う6つの集約関数を確認してみましょう!
データの集計
データの件数を取得(COUNT)
データの件数を取得するには COUNT関数 を使用します。
SELECT
SUBJECT AS "科目",
COUNT(SUBJECT) AS "テストを受けた人数"
FROM
scores
GROUP BY
SUBJECT;
科目 | テストを受けた人数 |
---|---|
英語 | 3 |
数学 | 3 |
国語 | 4 |
データの合計値を取得(SUM)
データの合計値を取得するには SUM関数 を使用します。
SELECT
GENDER AS "性別",
SUM(SCORE) AS "合計点"
FROM
scores
GROUP BY
GENDER;
性別 | 合計点 |
---|---|
女性 | 305 |
男性 | 375 |
データ平均値を取得(AVG)
データの平均値を取得するには AVG関数 を使用します。
SELECT
SUBJECT AS "科目",
AVG(SCORE) AS "平均点"
FROM
scores
GROUP BY
SUBJECT;
科目 | 平均点 |
---|---|
英語 | 76.6 |
数学 | 60 |
国語 | 67.5 |
データの中央値を取得(MEDIAN)
データの中央値を取得するには MEDIAN関数 を使用します。
SELECT
SUBJECT AS "科目" ,
MEDIAN(SCORE) AS "中央値"
FROM
scores
GROUP BY
SUBJECT;
科目 | 中央値 |
---|---|
国語 | 70 |
数学 | 60 |
英語 | 75 |
データ最大値を取得(MAX)
データの最大値を取得するには MAX関数 を使用します。
SELECT
SUBJECT AS "科目" ,
MAX(SCORE) AS "最高点"
FROM
scores
GROUP BY
SUBJECT;
科目 | 最高点 |
---|---|
英語 | 80 |
数学 | 65 |
国語 | 85 |
データ最小値を取得(MIN)
データの最小値を取得するには MIN関数 を使用します。
SELECT
SUBJECT AS "科目" ,
MIN(SCORE) AS "最低点"
FROM
scores
GROUP BY
SUBJECT;
科目 | 最低点 |
---|---|
英語 | 75 |
数学 | 55 |
国語 | 45 |
まとめ
6つのよく使われる集計関数について簡単に説明してみました。その他にもいろいろな集計関数があるので気になる方は調べて使ってみてください!
コメント