SQLにはhaving句があるのですが、その使い方を書いてみます。having句は集合関数を使ったときに、集計された結果を条件にすることができます。言葉ではわかりづらいので、例を示します。
注文テーブルがあります。注文されたときの一覧です。1回の注文で1レコードが作成されます。
ここで、注文テーブルからよく売れている(売れた個数が多い)商品を確認するSQLを考えてみると、以下のSQLになります。
select 商品, sum(個数) from 注文
group by 商品;
結果は、こうなります。
この結果からさらに「○個以上売れているもの」を抽出したい場合にhaving句が役に立ちます。例えば、3個以上売れているものを抽出するSQLは以下です。
select 商品, sum(個数) from 注文
group by 商品
having sum(個数) > 2;
結果は、こうなります。
having句は集合関数の結果に対して条件をつけて抽出することができます。集合関数には、count()、sum()、avg()などがあります。
別の例として、注文が2回以上あった商品(注文テーブルに2レコード以上ある)を抽出するSQLは以下です。
select 商品, count(*) from 注文
group by 商品
having count(*) > 1;
結果は、こうなります。
あるテーブルをgroup by句で集計した結果に対して、さらに条件をつけて検索したい場合にhaving句が役に立ちます。
以下の形で覚えてしまいましょう。