LoginSignup
2
4

More than 5 years have passed since last update.

検索条件に集計関数を使用する

Last updated at Posted at 2016-11-24

GROUP BY 句によって、元のテーブルをグループ分けして結果を得ることが出来るようになりました。ここでは、更にそのグループに対して条件を指定して選択する方法を考えます。

条件指定といえば、WHERE 句が真っ先に思い浮かぶかもしれません。しかし、WHERE 句はあくまで「レコード(行)」に対してのみしか条件を指定出来ないため、グループに対する条件指定(例えば、「含まれる行数が 2 行」や「平均値が 500」など)には使えないという制限があります。

WHEREでできないことは、HAVINGでできます。HAVINGはGROUP BYに対して使用します。

SELECT 集計キー1, 集計キー2, ...,
    集計関数(列名1), 集計関数(列名2), ...
FROM テーブル名
GROUP BY 集計キー1, 集計キー2, ...
HAVING 条件式

なお,HAVING句は必ずしもGROUP BY句と併用する必要はありません。グループ化して集計しない場合は以下のようにGROUP BY句を省略することができます。

SELECT 集計関数(列名1), 集計関数(列名2), ...
FROM テーブル名
HAVING 条件式

サンプル

従業員コード 従業員名 年齢 種別
A0001 チャーリー・ブラウン 15 人間
A0002 ペパーミント・パティ 15 人間
B0001 スヌーピー 4
C0001 ウッドストック 3

従業員マスタから平均年齢が15歳以上の種別を取得する場合は以下のようにSQLを書きます。なお以下のサンプルは分かりやすいようにAS句を使用して列に別名をつけています。

SQL

SELECT 種別, AVG(年齢) AS 年齢の平均
FROM 従業員マスタ
GROUP BY 種別
HAVING AVG(年齢) >= 15

結果

種別 年齢の平均
人間 15
2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4