選択(5) (Select構文 - Group By句 [Having句]) |
|
グループ化 … ある単位ごとに集計をしてみる |
1 |
1つの項目でグループ化をする | 年ごとにグループ化して、グループ毎の件数を選択 |
2 |
複数の項目でグループ化をする | 年, 性別ごとにグループ化して、グループ毎の一学期合計値を選択 |
3 |
グループ化したあと、さらに抽出する | グループ化した後で、件数が1件しかなかったグループを抽出 |
4 |
WhereとHavingの混合例 | グループ化する前に検索し、グループ化後にも検索するとは? |
1 | 年ごとにグループ化して、グループ毎の件数を選択 | ||
1つの項目でグループ化をする |
Select 年, COUNT(*) 件数 | 年と、データ件数("件数")を |
From 児童テーブル | 児童テーブルから取得する |
Group By 年 | 集計単位は、年ごとにする(グループ化) |
〜児童テーブル〜 | |
年 | 件数 |
5 | 1 |
4 | 2 |
3 | 1 |
* だめな例 : 「Select 年, 名前 ......... Group By 年」とした場合、 4年生は2件あるため、どの名前を選択していいのか判断がつかない。 * だめな例をむりやり直すとすれば : 「Select 年, MAX(名前) ......... Group By 年」 Group化項目以外は集合関数を 使用すればよい。でも、文法はあっていても、名前の最大って...。 (ちなみに、文字列の最大 = 文字をコード化してもっとも大きいもの) |
2 | 年, 性別ごとにグループ化して、グループ毎の一学期合計値を選択 | ||
複数の項目でグループ化をする |
Select 年, 性別, SUM(1学期) | 年、性別と、1学期の合計値を |
From 児童テーブル | 児童テーブルから取得する |
Group By 年, 性別 | 集計単位は、年、性別ごと(グループ化) |
Order By 年, 性別 | 並び順は、年、性別順 |
〜児童テーブル〜 | ||
年 | 性別 | Sum(1学期) |
5 | 1 | 50 |
4 | 1 | 68 |
3 | 2 | 25 |
3 | グループ化した後で、件数が1件しかなかったグループを抽出 | ||
グループ化したあと、さらに抽出する |
Select 年, COUNT(*) 件数 | 年と、データ件数("件数")を |
From 児童テーブル | 児童テーブルから取得する |
Group By 年 | 集計単位は、年ごと(グループ化) |
Having COUNT(*) = 1 | 集計結果を、データ件数("件数")が1件のもので抽出 |
〜児童テーブル〜 | |
年 | 件数 |
5 | 1 |
3 | 1 |
Where | グループ化する前の抽出条件を指定 |
Having | グループ化した後 ... すなわち、結果に対しての抽出条件を指定 |
上記例で説明すると、 グループ毎の件数 = COUNT(*)は、グループ化する前には決してわからない したがって、Having句を使用して検索することになる Group Byと対で、Havingは使用される (すなわち、Group By が使われなければ、Having を使うことはない) |
4 | グループ化する前に検索し、グループ化後にも検索するとは? | ||
WhereとHavingの混合例 |
Select 年, COUNT(*) 件数 | 年と、データ件数("件数")を |
From 児童テーブル | 児童テーブルから取得する |
Where 1学期 >= 40 | 検索条件は、1学期の点数が40点以上 |
Group By 年 | 集計単位は、年ごと(グループ化) |
Having COUNT(*) = 1 | 集計結果を、データ件数("件数")が1件のもので抽出 |
Order By 年 | 並び順は年 |
〜児童テーブル〜 | |
年 | 件数 |
5 | 1 |
4 | 1 |
〜児童テーブル〜 | ||||||||
出席番号 |
名前 | カナ名 | 年 | 組 | 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 |