OracleのHAVING グループ化して条件を指定する



グループ化して条件を指定するHAVING

OracleでGROUP BYでグループ化した結果に条件指定するには「HAVING」を使用します。

WHERとの違い

同じく条件指定する「WHERE」がありますが、データを抽出する順番が違います。

SQLの実行順序としては、「WHERE」の条件を最初に抽出します。その結果をGROUP BYでグループ化します。

たいして「HAVING」はGROUP BYでグループ化したあとにHAVING条件で抽出します。

例1. グループ化して件数指定するHAVINGパターン

emp_name
佐藤
佐藤
佐藤
加藤
加藤
吉田
井上

emp_name emp_count
佐藤 3
加藤 2

ここでは「GROUP BY emp_name」で名前でグループ化しました。

さらに「HAVING COUNT(*) > 1」という条件によって、グループ化した「名前」の件数が1件より大きい、つまり複数ある名前の人を抽出しました。

例2. グループ化して合計指定するHAVINGパターン

s_name subject point
佐藤太郎 英語 100
佐藤太郎 数学 90
井上花子 英語 70
井上花子 数学 60

emp_name emp_count
佐藤 190

ここでは「GROUP BY s_name」で生徒ごとにグループ化し、「HAVING SUM(score) > 180」で英数の点数合計が180点以上の人を抽出しました。

これでHAVINGをつかってグループ化して条件を指定して取得することができました。

以上、Oracleでグループ化して条件を指定するHAVINGの使い方でした。