前回、レコードの絞り込み(抽出)には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
|
|
|