【Oracle】集約関数とGROUP BYって?

Oracle

前回は、日付関数について説明しました。今回は集約関数と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
GROUP BY と集計関数(COUNT)を組み合わせてテストを受けた男女別の人数を取得

5人ずつテストを受けたことがわかりました。なんとなく使い方がイメージできたんじゃないでしょうか。

では、よく使う6つの集約関数を確認してみましょう!

データの集計

データの件数を取得(COUNT)

データの件数を取得するには COUNT関数 を使用します。

SELECT
  SUBJECT AS "科目",
  COUNT(SUBJECT) AS "テストを受けた人数"
FROM
  scores
GROUP BY
  SUBJECT;
科目テストを受けた人数
英語3
数学3
国語4
COUNT関数で科目毎のテストを受けた人数を取得

データの合計値を取得(SUM)

データの合計値を取得するには SUM関数 を使用します。

SELECT
  GENDER AS "性別",
  SUM(SCORE) AS "合計点"
FROM
  scores
GROUP BY
  GENDER;
性別合計点
女性305
男性375
SUM関数で合計点を取得

データ平均値を取得(AVG)

データの平均値を取得するには AVG関数 を使用します。

SELECT
  SUBJECT AS "科目",
  AVG(SCORE) AS "平均点"
FROM
  scores
GROUP BY
  SUBJECT;
科目平均点
英語76.6
数学60
国語67.5
AVG関数で平均点を取得

データの中央値を取得(MEDIAN)

データの中央値を取得するには MEDIAN関数 を使用します。

SELECT
  SUBJECT AS "科目" ,
  MEDIAN(SCORE) AS "中央値"
FROM
  scores
GROUP BY
  SUBJECT;
科目中央値
国語70
数学60
英語75
MEDIAN関数で科目毎の中央値を取得

データ最大値を取得(MAX)

データの最大値を取得するには MAX関数 を使用します。

SELECT
  SUBJECT AS "科目" ,
  MAX(SCORE) AS "最高点"
FROM
  scores
GROUP BY
  SUBJECT;
科目最高点
英語80
数学65
国語85
MAX関数で科目毎の最高点を取得

データ最小値を取得(MIN)

データの最小値を取得するには MIN関数 を使用します。

SELECT
  SUBJECT AS "科目" ,
  MIN(SCORE) AS "最低点"
FROM
  scores
GROUP BY
  SUBJECT;
科目最低点
英語75
数学55
国語45
MIN関数で科目毎の最低点を取得

まとめ

6つのよく使われる集計関数について簡単に説明してみました。その他にもいろいろな集計関数があるので気になる方は調べて使ってみてください!

コメント