プログラミング

SQLの集計と並べ替え

SQLにおける「集計(Aggregation)」と「並べ替え(Sorting)」は、データベースの操作において非常に重要な概念であり、特に大量のデータを効率的に処理するために不可欠な技術です。この記事では、SQLにおける集計と並べ替えの基本的な操作から、実務での活用方法まで幅広くカバーします。

1. 集計(Aggregation)とは?

集計とは、複数の行を1つの結果にまとめる処理を指します。データベースでは、通常、集計関数を使ってデータの集計を行います。SQLで使用される代表的な集計関数には、COUNT(), SUM(), AVG(), MIN(), MAX() があります。

1.1 COUNT()関数

COUNT()関数は、指定した条件に合致する行の数を返します。たとえば、特定のテーブルにあるレコード数を数える際に使用されます。

sql
SELECT COUNT(*) FROM employees;

上記のクエリは、employeesテーブルの全レコード数を返します。

1.2 SUM()関数

SUM()関数は、指定した列の値の合計を計算します。金額や数量の合計を求める際に有用です。

sql
SELECT SUM(salary) FROM employees;

このクエリは、employeesテーブルのsalary列に含まれる全ての給与の合計を返します。

1.3 AVG()関数

AVG()関数は、指定した列の平均値を計算します。例えば、社員の平均給与を求める場合に使います。

sql
SELECT AVG(salary) FROM employees;

これにより、employeesテーブルの給与の平均額を計算できます。

1.4 MIN()MAX()関数

MIN()MAX()は、それぞれ指定した列の最小値と最大値を返します。これらは、データの範囲を知りたいときに便利です。

sql
SELECT MIN(salary), MAX(salary) FROM employees;

このクエリでは、最小給与と最大給与を返します。

2. グループ化(GROUP BY)

集計関数は、通常、GROUP BY句と組み合わせて使用します。GROUP BYは、指定した列の値を基にデータをグループ化し、それぞれのグループに対して集計を行います。

2.1 基本的な使用例

例えば、各部門ごとの平均給与を求める場合、次のようなクエリを使用します。

sql
SELECT department_id, AVG(salary) FROM employees GROUP BY department_id;

このクエリでは、employeesテーブルをdepartment_idでグループ化し、各部門ごとの平均給与を計算します。

2.2 HAVING句によるフィルタリング

HAVING句は、グループ化後に集計結果に対して条件を指定するために使用します。WHERE句はグループ化前に条件を設定するのに対し、HAVINGは集計後に条件を指定するためのものです。

例えば、平均給与が50000以上の部門を求める場合、次のようにクエリを作成します。

sql
SELECT department_id, AVG(salary) FROM employees GROUP BY department_id HAVING AVG(salary) >= 50000;

3. 並べ替え(Sorting)

並べ替えは、結果セットの順序を制御するために使用します。SQLでは、ORDER BY句を使用して並べ替えを行います。

3.1 単純な並べ替え

ORDER BY句を使用することで、指定した列の値を昇順(ASC)または降順(DESC)で並べ替えできます。

sql
SELECT * FROM employees ORDER BY salary DESC;

このクエリでは、employeesテーブルを給与(salary)の降順で並べ替えています。

3.2 複数の列による並べ替え

複数の列を基準に並べ替えを行うことも可能です。例えば、まず給与で降順に並べ、同じ給与の社員を名前のアルファベット順に並べる場合、次のようなクエリを使用します。

sql
SELECT * FROM employees ORDER BY salary DESC, name ASC;

このクエリでは、salaryが降順で、同じ給与の場合はnameが昇順で並べ替えられます。

3.3 NULL値の並べ替え

SQLでは、NULL値はデータの欠損として扱われますが、並べ替えの際にNULL値をどのように扱うかを指定できます。デフォルトでは、NULL値は降順で最後に並べられますが、これを変更することも可能です。

sql
SELECT * FROM employees ORDER BY salary DESC NULLS FIRST;

このクエリでは、NULL値を最初に並べています。

4. 集計と並べ替えの組み合わせ

集計と並べ替えはよく一緒に使われます。例えば、各部門の給与の合計を計算し、給与の合計が高い順に部門を並べる場合、次のようにクエリを作成します。

sql
SELECT department_id, SUM(salary) FROM employees GROUP BY department_id ORDER BY SUM(salary) DESC;

このクエリでは、employeesテーブルを部門ごとにグループ化し、その給与合計を降順で並べ替えています。

5. よく使われる集計と並べ替えのパターン

5.1 最高給与の社員を表示する

最も給与が高い社員を表示する場合、ORDER BYを使用して給与を降順に並べ、LIMITで最初の1件だけを取得します。

sql
SELECT * FROM employees ORDER BY salary DESC LIMIT 1;

5.2 各部門で給与が最も高い社員を表示する

各部門ごとに給与が最も高い社員を取得するには、サブクエリを使用することが一般的です。

sql
SELECT e.* FROM employees e WHERE e.salary = ( SELECT MAX(salary) FROM employees WHERE department_id = e.department_id );

このクエリでは、各部門で最も給与が高い社員を取得します。

結論

SQLにおける集計と並べ替えは、データ分析において欠かせない操作です。集計関数やGROUP BY句を使ってデータを集約し、ORDER BY句でその結果を並べ替えることによって、さまざまな形でデータを洞察することが可能になります。これらのテクニックを理解し、効果的に活用することで、データベース操作をさらに強化することができます。

Back to top button