SQLのサブクエリを使用して集約関数を効率的に活用する方法について解説します。サブクエリと集約関数はそれぞれ単独で非常に有用な機能ですが、組み合わせることでさらに高度なデータ分析が可能になります。本記事では、具体的な使用例を交えて、このテクニックを習得するためのステップを説明します。
サブクエリとは
サブクエリは、SQLのSELECT文の中で別のSELECT文を使用することです。この機能を使うことで、単一のSQL文で複数の操作を行えるようになります。
集約関数とは
集約関数は、複数の行から一つの結果を生成するSQLの関数です。代表的なものには、SUM(), COUNT(), AVG(), MIN(), MAX()などがあります。
サブクエリと集約関数の基本的な組み合わせ
サブクエリと集約関数を組み合わせることで、特定の条件を満たすデータに対して集約操作を行うことができます。
基本的な使用例
以下は、サブクエリでフィルタリングされたデータに対して集約関数を適用する基本的なSQL文です。
SELECT AVG(subquery.average_salary)
FROM (
SELECT department, AVG(salary) AS average_salary
FROM employees
WHERE department IN ('開発', '営業')
GROUP BY department
) AS subquery;
このSQL文の動作
このSQL文では、最初にサブクエリが実行され、「開発」または「営業」の部門に所属する従業員の平均給与が計算されます。次に、その結果に対して更に平均を取る操作が行われます。
具体的な使用例
製品ごとの平均販売価格と総販売数
製品テーブル(products)と売上テーブル(sales)があり、以下のような関係になっているとします。
products | sales |
---|---|
product_id | sale_id |
product_name | product_id |
price | quantity |
この状況で、製品ごとに平均販売価格と総販売数を知りたい場合、サブクエリと集約関数を組み合わせて以下のようにSQL文を書くことができます。
SELECT p.product_name, AVG(s.price), SUM(subquery.total_quantity)
FROM products p
JOIN (
SELECT product_id, SUM(quantity) AS total_quantity
FROM sales
GROUP BY product_id
) AS subquery
ON p.product_id = subquery.product_id
JOIN sales s ON p.product_id = s.product_id
GROUP BY p.product_name;
このSQL文の動作
このSQL文では、サブクエリが最初に実行され、各製品に対する総販売数が計算されます。その後、その情報を用いて製品ごとの平均販売価格と総販売数が計算されます。
まとめ
サブクエリと集約関数を組み合わせることで、より高度なデータ分析が可能になります。このテクニックをマスターすることで、日々の業務やデータ分析作業を効率化することができるでしょう。
コメント