重要なポイント

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

構文

集計単位

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

<例題>

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

選択カラムの追加

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

<例題>

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

集計単位が2つ以上

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

<例題>

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

条件追加

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

<例題>

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

並び順追加

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

<例題>

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

注意すべきポイント

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