重要なポイント

「~ごと(毎)」や「集計単位」というキーワードが出たら「group by」!

構文

集計単位

select avg([別名].[カラム名]) from [テーブル名] [別名]
 group by [別名].[カラム名];

<例題>

  • 学生マスタ(students_mst)からデータを取得すること。
  • 抽出条件なし
  • カラム:テスト点数(test_score)の平均値を取得(平均点)すること
  • 集計単位
    • 学科ID(department_id)ごと
select avg(sm.test_score) from students_mst sm
 group by sm.department_id;

選択カラムの追加

select
 [別名].[カラム名1]
,avg([別名].[カラム名2])
 from [テーブル名] [別名]
 group by [別名].[カラム名1];

<例題>

  • 学生マスタ(students_mst)からデータを取得すること。
  • 抽出条件なし
  • カラム
    • 学科ID(department_id)
    • テスト点数(test_score)の平均値を取得(平均点)すること
  • 集計単位
    • 学科ID(department_id)ごと
select
 sm.department_id
,avg(sm.test_score)
 from students_mst sm
 group by sm.department_id;

集計単位が2つ以上

select
 [別名].[カラム名1]
,[別名].[カラム名2]
,avg([別名].[カラム名3])
 from [テーブル名] [別名]
 group by [別名].[カラム名1]
,[別名].[カラム名2];

<例題>

  • 学生マスタ(students_mst)からデータを取得すること。
  • 抽出条件なし
  • カラム
    • 学科ID(department_id)
    • 性別(gender)
    • テスト点数(test_score)の平均値を取得(平均点)すること
  • 集計単位
    • 学科ID(department_id)ごと
    • 性別(gender)ごと
select
 sm.department_id
,sm.gender
,avg(sm.test_score)
 from students_mst sm
 group by sm.department_id
,sm.gender;

条件追加

select
 [別名].[カラム名1]
,[別名].[カラム名2]
,avg([別名].[カラム名3])
 from [テーブル名] [別名]
 where [別名].[カラム名4] = [条件1]
 and [別名].[カラム名5] = [条件2]
 group by [別名].[カラム名1]
,[別名].[カラム名2];

<例題>

  • 学生マスタ(students_mst)からデータを取得すること。
  • 抽出条件
    • 学科ID(department_id)が以上
    • かつ学科ID(department_id)が10未満
  • カラム
    • 学科ID(department_id)
    • 性別(gender)
    • テスト点数(test_score)の平均値を取得(平均点)すること
  • 集計単位
    • 学科ID(department_id)ごと
    • 性別(gender)ごと
select
 sm.department_id
,sm.gender
,avg(sm.test_score)
 from students_mst sm
 where sm.department_id >= 2
 and sm.department_id < 10
 group by sm.department_id
,sm.gender;

並び順追加

select
 [別名].[カラム名1]
,[別名].[カラム名2]
,avg([別名].[カラム名3])
 from [テーブル名] [別名]
 where [別名].[カラム名4] = [条件1]
 and [別名].[カラム名5] = [条件2]
 group by [別名].[カラム名1]
,[別名].[カラム名2]
 order by [別名].[カラム名1];

<例題>

  • 学生マスタ(students_mst)からデータを取得すること。
  • 抽出条件
    • 学科ID(department_id)が以上
    • かつ学科ID(department_id)が10未満
  • カラム
    • 学科ID(department_id)
    • 性別(gender)
    • テスト点数(test_score)の平均値を取得(平均点)すること
  • 集計単位
    • 学科ID(department_id)ごと
    • 性別(gender)ごと
  • 並び替え
    • 学科ID(department_id)を降順
select
 sm.department_id
,sm.gender
,avg(sm.test_score)
 from students_mst sm
 where sm.department_id >= 2
 and sm.department_id < 10
 group by sm.department_id
,sm.gender
 order by sm.department_id desc;

注意すべきポイント

集計関数以外で「select」と「from」の間で選択されたカラムは、「group by」に記述しないといけない。