SQL入門 - GROUP BYとHAVING -

Preview:

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日水曜日

Recommended