SQLでGROUP BYとJOINを効果的に使うテクニック

この記事では、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.nameAVG(employees.salary)
Engineering60000
HR50000
部署ごとの平均給与

部署と役職ごとの平均給与を求める

さらに細かく役職ごとにも知りたい場合は、以下のようにします。

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.nameemployees.titleAVG(employees.salary)
EngineeringEngineer55000
HRManager50000
部署と役職ごとの平均給与

まとめ

SQLの`GROUP BY`と`JOIN`を理解して効果的に使えるようになると、データ解析の幅が大きく広がります。特に、これらを組み合わせることで、多角的なデータ解析が可能になります。今回紹介したテクニックをぜひ活用して、より高度なデータ解析を行ってみてください。

コメント

コメントする

目次