この記事では、SQLの`GROUP BY`と`JOIN`を効果的に使うテクニックについて解説します。具体的なテーブルとクエリの例を使い、どのようにこれらの機能を駆使してデータ解析を行うかを学びましょう。
目次
GROUP BYの基本
`GROUP BY`句は、選択したカラムに基づいて行をグループ化するSQLの機能です。例えば、従業員テーブルがあり、各部署ごとの平均給与を知りたい場合、`GROUP BY`を使います。
基本的なGROUP BYの使い方
最も基本的な形は以下です。
SELECT department, AVG(salary)
FROM employees
GROUP BY department;
複数カラムでのGROUP BY
複数のカラムでグループ化する場合もあります。このときはカンマで区切ります。
SELECT department, title, AVG(salary)
FROM employees
GROUP BY department, title;
JOINの基本
`JOIN`は、異なるテーブルを連結して一つの結果セットを作成する操作です。
INNER JOIN
最もよく使われる`INNER JOIN`は、2つのテーブルの共通のレコードのみを結果として返します。
SELECT employees.id, employees.name, departments.name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;
LEFT JOIN
一方で、`LEFT JOIN`は左側のテーブルのすべてのレコードと、一致する右側のテーブルのレコードを結果として返します。
SELECT employees.id, employees.name, departments.name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;
GROUP BYとJOINの組み合わせ
これらを組み合わせると、非常に強力なデータ解析が可能です。
部署ごとの平均給与を求める
例えば、部署ごとの平均給与を求めたい場合には以下のようなクエリを作成します。
SELECT departments.name, AVG(employees.salary)
FROM employees
INNER JOIN departments ON employees.department_id = departments.id
GROUP BY departments.name;
departments.name | AVG(employees.salary) |
---|---|
Engineering | 60000 |
HR | 50000 |
部署と役職ごとの平均給与を求める
さらに細かく役職ごとにも知りたい場合は、以下のようにします。
SELECT departments.name, employees.title, AVG(employees.salary)
FROM employees
INNER JOIN departments ON employees.department_id = departments.id
GROUP BY departments.name, employees.title;
departments.name | employees.title | AVG(employees.salary) |
---|---|---|
Engineering | Engineer | 55000 |
HR | Manager | 50000 |
まとめ
SQLの`GROUP BY`と`JOIN`を理解して効果的に使えるようになると、データ解析の幅が大きく広がります。特に、これらを組み合わせることで、多角的なデータ解析が可能になります。今回紹介したテクニックをぜひ活用して、より高度なデータ解析を行ってみてください。
created by Rinker
¥4,554
(2024/12/03 11:34:39時点 Amazon調べ-詳細)
コメント