SQLのHAVING句でグループ化したデータを効率的にフィルタリングする方法

この記事では、SQLのHAVING句を用いてグループ化したデータを効率的にフィルタリングする方法を解説します。具体的なコード例とその解説、応用例を含めて、実践的な知識を身に付けていきましょう。

目次

はじめに

SQLにはデータを効率的にフィルタリングするための多くの機能がありますが、HAVING句は特にグループ化したデータに対するフィルタリングで重要な役割を果たします。この記事では、HAVING句の基本的な使い方から、より高度な使い方までを網羅します。

HAVING句の基本概念

HAVING句は、GROUP BY句でグループ化した後の集計結果に対して条件を適用するための句です。WHERE句が行に対するフィルタリングを行うのに対して、HAVING句はグループに対するフィルタリングを行います。

基本的な構文

HAVING句は通常、GROUP BY句の後に配置されます。基本的な構文は以下の通りです。

SELECT カラム名, 集計関数(カラム名)
FROM テーブル名
GROUP BY カラム名
HAVING 集計関数(カラム名) 条件式;

HAVING句の基本的な使用例

サンプルデータテーブル

以下の「売上データテーブル」を例に取ります。

salesman_idrevenue
11000
11500
22000
22500
33000
売上データテーブル

コード例と解説

例えば、売上が合計で4000以上の営業員だけを抽出したい場合、HAVING句を使用します。

-- 売上が4000以上の営業員を抽出
SELECT salesman_id, SUM(revenue)
FROM sales
GROUP BY salesman_id
HAVING SUM(revenue) >= 4000;

このコードでは、まず`salesman_id`でグループ化を行い、その後で`SUM(revenue)`が4000以上のグループ(営業員)だけをHAVING句でフィルタリングしています。

演習問題とその回答

問題

売上が2000以上であるが3000以下の営業員を抽出してください。

回答と解説

-- 売上が2000以上3000以下の営業員を抽出
SELECT salesman_id, SUM(revenue)
FROM sales
GROUP BY salesman_id
HAVING SUM(revenue) >= 2000 AND SUM(revenue) <= 3000;

この場合も基本的な流れは同じで、GROUP BYでグループ化した後、HAVING句で条件に合うグループをフィルタリングしています。

まとめ

HAVING句は、GROUP BY句でグループ化したデータに対してフィルタリングを行う非常に便利な句です。特に大量のデータを効率よく処理する場合には、このHAVING句の使い方をマスターすることで、多くの時間とリソースを節約することができます。

コメント

コメントする

目次