データベース千夜一夜第21回

データの集計(3)~集計関数とグループ化 長谷川裕行
有限会社 手國堂

HAVING句による絞り込み

前回、レコードの絞り込み(抽出)にはWHERE句の他にHAVING句があることを紹介しました。HAVING句は効率が悪いためあまり使わない方がよいと説明しましたが、HAVING句を使わなければ絞り込めない場合もあります。


- 集計項目をキーに絞り込む -

先に、WHERE句でレコードを絞り込んでから集計を行う例を示しました。前回説明したように、WHERE句はGROUP BY句によるグループ化より先に実行されるため、グループ化した結果、あるいは集計関数を使った結果をキーにレコードを絞り込むことはできません。

例えば、テーブル「累積売上_fx」から顧客ごとの販売額の合計を求め、その『販売額の合計が30,000円以上のレコードだけ』を表示する場合、以下のようにしてもエラーとなります。

 SELECT 氏名, SUM(金額) AS 合計
 FROM 累積売上_fx
 WHERE SUM(金額) >= 30000
 GROUP BY 氏名


- HAVING句でなければ絞り込めない -

上のSQLでは、WHERE句の条件に指定している“SUM(金額)”という式がGROUP BY句によるグループ化の段階で実行されるため、先に実行されるWHERE句が条件を判定する段階では存在していないのです。

このような場合には、以下のようにHAVING句を使い、グループ化の後からレコードを絞り込みます。

 SELECT 氏名, SUM(金額) AS 合計
 FROM 累積売上_fx
 GROUP BY 氏名
 HAVING SUM(金額) >= 30000




トップページ
SUM関数とグループ化
集計関数の使用例
グループ化と集計
HAVING句による絞り込み
集計項目をキーに絞り込む
HAVING句でなければ絞り込めない
グループ化と集計の例
DISTINCTオプション
あとがき
Copyright © MESCIUS inc. All rights reserved.