|
選択(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 |