検索条件を指定してレコードを選択する場合,通常はWHERE句を使用しますが,集計関数は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 |
注意.
サンプルで使用するテーブルは説明のため正規化を行っていなかったり,一般的でない列が含まれている場合があります.ご容赦ください.