Upload
kanazawa-technical-college
View
439
Download
2
Embed Size (px)
Citation preview
SQL入門- GROUP BY と HAVING -
13年10月2日水曜日
データのグループ化(GROUP BY)
13年10月2日水曜日
• 書式• SELECT 集計関数 FROM テーブル GROUP BY フィールド
• 注意点• SELECT句には集計関数を使うことが多い• GROUP BY 句にはグループ化するフィールドが必要
GROUP BY 句
13年10月2日水曜日
• 血液型毎の人数• 男女の人数• 都道府県毎の人数• 血液型毎の平均年齢• 「血液型と男女」毎の人数• 「都道府県と男女」毎の平均年令
13年10月2日水曜日
血液型毎の人数
•SELECT blood_type,count(blood_type)FROM pinfoGROUP BY blood_type;
13年10月2日水曜日
都道府県毎の人数
•SELECT prefecture,count(*) FROM pinfo GROUP BY prefecture;
13年10月2日水曜日
血液型毎の平均年令
•SELECT blood_type,AVG(age)FROM pinfoGROUP BY blood_type;
13年10月2日水曜日
都道府県毎のA型の人数
• SELECT prefecture, COUNT( * ) FROM pinfo WHERE blood_type = 'A' GROUP BY prefecture ORDER BY prefecture
集計する前にレコードを絞り込んでいる
13年10月2日水曜日
グループ化後の抽出条件(HAVING)
13年10月2日水曜日
•平均年令が36歳以上の血液型•男性が3人以上いる都道府県
などなど、一旦集計した後で、レコードを絞り込むことも出来る
13年10月2日水曜日
HAVING句•書式• SELECT 集計関数 FROM テーブル GROUP BY フィールド名 HAVING 集計結果による抽出条件
•注意点•WHEREと混同/混乱しない
13年10月2日水曜日
平均年令が36以上の血液型
• SELECT blood_type, COUNT( blood_type ) , AVG( age )
FROM pinfo GROUP BY blood_type HAVING AVG( age ) >=36
WHERE AVG(age) >= 36 とは書かない!
13年10月2日水曜日
男性が3人以上いる都道府県
SELECT prefecture, COUNT( sex )
FROM pinfo WHERE sex = '男'
GROUP BY prefecture HAVING COUNT( sex ) >=3
WHERE COUNT(sex) >= 3 とは書かない!
13年10月2日水曜日
ポイント
•WHERE はグループ化(GROUP BY)の前に評価・実行される。
•HAVINGはグループ化(GROUP BY)の後に評価・実行される
13年10月2日水曜日