前回は、日付関数について説明しました。今回は集約関数と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つのよく使われる集計関数について簡単に説明してみました。その他にもいろいろな集計関数があるので気になる方は調べて使ってみてください!
 
 
