SQL攻略 - Web上でSQLを実行しながらマスターするサイト
English ver [10 Selection criteria for grouped tables (HAVING)] is here.
ホーム >> SQL攻略 - グループ化したテーブルの選択条件(HAVING)

グループ化したテーブルの条件抽出(HAVING)

グループ化したテーブルから条件抽出する方法を学びます。

1.HAVINGの使い方

--SAL(給料)の平均が2500以上のJOB(仕事)を抽出する
SELECTJOB
FROMEMP
GROUP BYJOB
HAVINGAVG(SAL) >= 2500
■ HAVINGの使い方

HAVINGはGROUP BY句に対して抽出条件を設定することができます。WHERE条件がGROUP BYでグループ化される前のレコード抽出段階の条件になるのに対し、HAVINGはグループ化後の条件になります。

■ HAVINGの記載方法

GROUP BY句の後ろに[ HAVING 条件式 ] と記述します。HAVING句に使用される条件は、グループごとに値を持たなくてはならないので、グループ化したキーか集合関数の比較条件を記述することが出来ます。

■ 実習

それでは実習です。2題出題します。


2.グループ化したテーブルの選択条件(HAVING)の過去問題

データベーススペシャリスト午前平成13年問37
”社員”表から同姓同名を検索する SQL 文として,適切なものはどれか。

社員
社員番号 氏 名  生年月日 所 属
 0001 新井 健二1950-02-04営業部
 0002 鈴木 太郎1955-03-13総務部
 0003 佐藤 宏 1961-07-11技術部
 0004 田中 博 1958-01-24企画部
 0005 鈴木 太郎1948-11-09営業部
・・・

SELECT DISTINCT 氏名 FROM 社員 ORDER BY 氏名
SELECT 氏名 FROM 社員 GROUP BY 氏名 HAVING COUNT(*) > 1
SELECT 氏名 FROM 社員 WHERE 氏名 > 1
SELECT 氏名 FROM 社員 WHERE 氏名 = 氏名
正解



解説

同姓同名を探場合は、氏名でグループ化して、そのレコード数をカウントし2以上のものを検索すればよいですね。

GROUP BYでグループ化したレコードに対する条件はHAVINGで指定します。

DISTINCTは表示する段階で重複した行を削除します。

これで [ グループ化したテーブルの選択条件(HAVING) ] は終了です。