選択(5) (Select構文 - Group By句 [Having句])

 

  グループ化 … ある単位ごとに集計をしてみる

MENU



ここでは、グループ化(くくり)の基本を学習します。以下のメニューから構文例を選んでください。

1

1つの項目でグループ化をする 年ごとにグループ化して、グループ毎の件数を選択

2

複数の項目でグループ化をする 年, 性別ごとにグループ化して、グループ毎の一学期合計値を選択

3

グループ化したあと、さらに抽出する グループ化した後で、件数が1件しかなかったグループを抽出

4

WhereとHavingの混合例 グループ化する前に検索し、グループ化後にも検索するとは?



1 年ごとにグループ化して、グループ毎の件数を選択    
 1つの項目でグループ化をする

TOP

NEXT

  Select 年, COUNT(*) 件数   年と、データ件数("件数")を
    From 児童テーブル   児童テーブルから取得する
  Group By 年   集計単位は、年ごとにする(グループ化)

〜児童テーブル〜
件数
5 1
4 2
3 1

>> グループ化する項目以外を、Selectしてはいけない(Selectの項目に使用してはいけない) 決まりがある。
  * だめな例 :
      「Select 年, 名前 ......... Group By 年」とした場合、
    4年生は2件あるため、どの名前を選択していいのか判断がつかない。

  * だめな例をむりやり直すとすれば :
      「Select 年, MAX(名前) ......... Group By 年
     
      Group化項目以外は集合関数を 使用すればよい。でも、文法はあっていても、名前の最大って...。
    (ちなみに、文字列の最大 = 文字をコード化してもっとも大きいもの)



2 年, 性別ごとにグループ化して、グループ毎の一学期合計値を選択    
 複数の項目でグループ化をする

TOP

NEXT

  Select 年, 性別, SUM(1学期)   年、性別と、1学期の合計値を
    From 児童テーブル   児童テーブルから取得する
  Group By 年, 性別   集計単位は、年、性別ごと(グループ化)
  Order By 年, 性別   並び順は、年、性別順

〜児童テーブル〜
性別 Sum(1学期)
5 1 50
4 1 68
3 2 25



3 グループ化した後で、件数が1件しかなかったグループを抽出    
 グループ化したあと、さらに抽出する

TOP

NEXT

  Select 年, COUNT(*) 件数   年と、データ件数("件数")を
    From 児童テーブル   児童テーブルから取得する
  Group By 年   集計単位は、年ごと(グループ化)
  Having COUNT(*) = 1   集計結果を、データ件数("件数")が1件のもので抽出

〜児童テーブル〜
件数
5 1
3 1

>> WhereとHavingのちがい
Where グループ化する前の抽出条件を指定
Having グループ化した後 ... すなわち、結果に対しての抽出条件を指定
上記例で説明すると、
 グループ毎の件数 = COUNT(*)は、グループ化する前には決してわからない
  したがって、Having句を使用して検索することになる

Group Byと対で、Havingは使用される (すなわち、Group By が使われなければ、Having を使うことはない)



4 グループ化する前に検索し、グループ化後にも検索するとは?    

  WhereとHavingの混合例

TOP

NEXT

  Select 年, COUNT(*) 件数   年と、データ件数("件数")を
    From 児童テーブル   児童テーブルから取得する
  Where 1学期 >= 40   検索条件は、1学期の点数が40点以上
  Group By 年   集計単位は、年ごと(グループ化)
  Having COUNT(*) = 1   集計結果を、データ件数("件数")が1件のもので抽出
  Order By 年   並び順は年

〜児童テーブル〜
件数
5 1
4 1

>> 考え方

(1) 1学期の点数が40点以上がWhere(検索条件)なので、使用されるデータは2件(下表の白い部分)
〜児童テーブル〜

出席番号

名前 カナ名 1学期 2学期 3学期 性Code
1 高橋 タカハシ 5 1 50 30 80 1
2 伊藤 イトウ 4 1 40 40 50 1
3 藤田 フジタ 4 2 28 28 15 1
4 高橋 タカハシ 3 3 25 66 95 2

(2) それをグループ化して、件数が1件のものをHaving(集計結果検索)する。





MENU TOP BACK NEXT
掲載されている会社名および製品名は、各社の商標または登録商標です。

Copyright (C) 2006 RasComputerCorp.
All rights reserved.