SQLHAVING句とWHERE句の違いをサンプルで解説

SQLHAVING句とWHERE句の違い サンプルで解説

SQLの集計関数を利用後に、条件抽出したい場合はHAVING句を使います。WHERE句ですと抽出することができません。HAVING句は触れる方が少ないので、存在を知らない方もいると思います。WHERE句で条件抽出できるはずなのにできない。なんでかな~と調べていたらHAVING句を使う必要があって初めて知るパターンです。

本記事では、図解とサンプルデータを用いながらHAVING句とWHERE句の違いについて解説いたします。

目次

SQLのHAVING句とWHERE句の違い

SQL処理順が影響!集計関数GROUP BYの前がWHERE句で後がHAVING句

SQLはコード記載の順番で処理されておらず、下記順番で処理されています。この処理順番を意識してSQL文を書く必要があります。

ポイント

集計関数GROUP BYにあるのがWHERE後ろにあるのがHAVING

WHERE:集計(GROUP BY)される前にSQL処理されるので、集計後の値で絞り込むことができない。

HAVING:集計(GROUP BY)後にSQL処理されるので、集計後の値を絞り込める

  1. FROM
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. ORDER BY

サンプルデータでWHERE句とHAVING句の違いを解説

SQL構文例に使うサンプルファイル

下記データを例にコードをご紹介いたします。

■商品情報ファイル1

カテゴリ商品名原価個数在庫金額販売開始日販売終了日
1カビキラー1158111582025/01/202025/03/20

HAVING句を利用したSQLサンプル例と解説

カテゴリが1のものを対象に在庫金額合計を求め、金額合計が5,000円以上のものを集計するSQL文が下記。SQL文が処理される順番をコードに振りました。(#から右の文章)

select
商品名,sum(在庫金額) as 合計金額
from 商品情報ファイル   #処理順1:利用テーブル
where カテゴリ = '1'   #処理順2:抽出条件
group by 1            #処理順3:集計関数
having                #処理順4:集計後の条件処理
合計金額 >5000

上記SQL文を実行すると下記のような集計結果がでてきます。group byで集計された値にたいして、havingを用いて5,000円以上の商品を抽出しています。

商品名合計金額
カビキラー10,000
石鹸7,000

上記SQLでWHERE句利用のサンプル例と解説

上記HAVING句をあえてWHERE句で書くと下記イメージです。下記の場合は抽出条件WHERE句のところにand 在庫金額 >5000と書きました。

処理順を見ると、where カテゴリ = ‘1’ and 在庫金額 >5000の後に集計関数group byが来るので、集計前の値で絞り込まれます。※WHERE句は1,000円が含まれません。

HAVING句の場合(5,000円以上抽出)
1,000円
6,000円
8,000円

結果:15,000円

WHERE句の場合(5,000円以上抽出)
・1,000円
6,000円
8,000円

結果:14,000円

select
商品名,sum(在庫金額) as 合計金額
from 商品情報ファイル                       #処理順1:利用テーブル
where カテゴリ = '1'  and  在庫金額 >5000   #処理順2:抽出条件
group by 1                                 #処理順3:集計関数
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

著者:ブロガー2つ(につ)

■サイト設立目的
人海戦術の時代からテクノロジー活用による自動化促進の時代に変化。テクノロジー活用を促進するための情報共有やテクノロジー支援を行います。

目次