この記事では、SQLの窓関数(Window Functions)と複数テーブルのJOINを効率的に利用するシナリオについて解説します。具体的なデータテーブルとコード例を用いて、各機能の有用性と応用方法について詳しく説明します。
目次
窓関数(Window Functions)とは
窓関数はSQLの強力な機能の一つで、レコードを独立したものとしてではなく、特定の「窓」または「範囲」の中の関連するレコードとともに考慮する方法です。
基本的な窓関数の使用例
SELECT name, salary,
AVG(salary) OVER () AS avg_salary
FROM employees;
パーティションを使用した窓関数
SELECT name, department, salary,
AVG(salary) OVER (PARTITION BY department) AS avg_salary_by_department
FROM employees;
複数テーブルのJOINとは
JOINは、複数のテーブルからデータを効率よく抽出するためのSQLの基本的な操作です。
INNER JOINの基本的な使用例
SELECT customers.name, orders.order_id
FROM customers
INNER JOIN orders ON customers.customer_id = orders.customer_id;
LEFT JOINの基本的な使用例
SELECT customers.name, orders.order_id
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;
窓関数と複数テーブルのJOINの組み合わせシナリオ
窓関数とJOINを組み合わせることで、さまざまな高度なデータ操作が可能です。
シナリオ1: 商品の月次売上とその月の平均売上を計算
productsテーブル | salesテーブル |
---|---|
product_id, product_name | sale_id, product_id, sale_date, sale_amount |
SELECT p.product_name, s.sale_date,
SUM(s.sale_amount) OVER (PARTITION BY s.sale_date) AS daily_sales,
AVG(s.sale_amount) OVER (PARTITION BY s.sale_date) AS avg_daily_sales
FROM products p
LEFT JOIN sales s ON p.product_id = s.product_id
WHERE MONTH(s.sale_date) = 7;
シナリオ2: 従業員の給与と部署別の平均給与を一覧表示
employeesテーブル | departmentsテーブル |
---|---|
employee_id, name, department_id, salary | department_id, department_name |
SELECT e.name, d.department_name, e.salary,
AVG(e.salary) OVER (PARTITION BY e.department_id) AS avg_department_salary
FROM employees e
INNER JOIN departments d ON e.department_id = d.department_id;
まとめ
窓関数と複数テーブルのJOINは、データ分析において非常に高度な操作を可能にするSQLの機能です。これらの機能を理解し、適切に使用することで、より深い洞察と効率的なデータ操作が可能になります。
created by Rinker
¥4,554
(2024/11/22 10:55:01時点 Amazon調べ-詳細)
コメント