SQLにおける「集計(Aggregation)」と「並べ替え(Sorting)」は、データベースの操作において非常に重要な概念であり、特に大量のデータを効率的に処理するために不可欠な技術です。この記事では、SQLにおける集計と並べ替えの基本的な操作から、実務での活用方法まで幅広くカバーします。
1. 集計(Aggregation)とは?
集計とは、複数の行を1つの結果にまとめる処理を指します。データベースでは、通常、集計関数を使ってデータの集計を行います。SQLで使用される代表的な集計関数には、COUNT()
, SUM()
, AVG()
, MIN()
, MAX()
があります。

1.1 COUNT()
関数
COUNT()
関数は、指定した条件に合致する行の数を返します。たとえば、特定のテーブルにあるレコード数を数える際に使用されます。
sqlSELECT COUNT(*) FROM employees;
上記のクエリは、employees
テーブルの全レコード数を返します。
1.2 SUM()
関数
SUM()
関数は、指定した列の値の合計を計算します。金額や数量の合計を求める際に有用です。
sqlSELECT SUM(salary) FROM employees;
このクエリは、employees
テーブルのsalary
列に含まれる全ての給与の合計を返します。
1.3 AVG()
関数
AVG()
関数は、指定した列の平均値を計算します。例えば、社員の平均給与を求める場合に使います。
sqlSELECT AVG(salary) FROM employees;
これにより、employees
テーブルの給与の平均額を計算できます。
1.4 MIN()
とMAX()
関数
MIN()
とMAX()
は、それぞれ指定した列の最小値と最大値を返します。これらは、データの範囲を知りたいときに便利です。
sqlSELECT MIN(salary), MAX(salary) FROM employees;
このクエリでは、最小給与と最大給与を返します。
2. グループ化(GROUP BY)
集計関数は、通常、GROUP BY
句と組み合わせて使用します。GROUP BY
は、指定した列の値を基にデータをグループ化し、それぞれのグループに対して集計を行います。
2.1 基本的な使用例
例えば、各部門ごとの平均給与を求める場合、次のようなクエリを使用します。
sqlSELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id;
このクエリでは、employees
テーブルをdepartment_id
でグループ化し、各部門ごとの平均給与を計算します。
2.2 HAVING
句によるフィルタリング
HAVING
句は、グループ化後に集計結果に対して条件を指定するために使用します。WHERE
句はグループ化前に条件を設定するのに対し、HAVING
は集計後に条件を指定するためのものです。
例えば、平均給与が50000以上の部門を求める場合、次のようにクエリを作成します。
sqlSELECT 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
)で並べ替えできます。
sqlSELECT * FROM employees
ORDER BY salary DESC;
このクエリでは、employees
テーブルを給与(salary
)の降順で並べ替えています。
3.2 複数の列による並べ替え
複数の列を基準に並べ替えを行うことも可能です。例えば、まず給与で降順に並べ、同じ給与の社員を名前のアルファベット順に並べる場合、次のようなクエリを使用します。
sqlSELECT * FROM employees
ORDER BY salary DESC, name ASC;
このクエリでは、salary
が降順で、同じ給与の場合はname
が昇順で並べ替えられます。
3.3 NULL
値の並べ替え
SQLでは、NULL
値はデータの欠損として扱われますが、並べ替えの際にNULL
値をどのように扱うかを指定できます。デフォルトでは、NULL
値は降順で最後に並べられますが、これを変更することも可能です。
sqlSELECT * FROM employees
ORDER BY salary DESC NULLS FIRST;
このクエリでは、NULL
値を最初に並べています。
4. 集計と並べ替えの組み合わせ
集計と並べ替えはよく一緒に使われます。例えば、各部門の給与の合計を計算し、給与の合計が高い順に部門を並べる場合、次のようにクエリを作成します。
sqlSELECT department_id, SUM(salary)
FROM employees
GROUP BY department_id
ORDER BY SUM(salary) DESC;
このクエリでは、employees
テーブルを部門ごとにグループ化し、その給与合計を降順で並べ替えています。
5. よく使われる集計と並べ替えのパターン
5.1 最高給与の社員を表示する
最も給与が高い社員を表示する場合、ORDER BY
を使用して給与を降順に並べ、LIMIT
で最初の1件だけを取得します。
sqlSELECT * FROM employees
ORDER BY salary DESC
LIMIT 1;
5.2 各部門で給与が最も高い社員を表示する
各部門ごとに給与が最も高い社員を取得するには、サブクエリを使用することが一般的です。
sqlSELECT e.*
FROM employees e
WHERE e.salary = (
SELECT MAX(salary)
FROM employees
WHERE department_id = e.department_id
);
このクエリでは、各部門で最も給与が高い社員を取得します。
結論
SQLにおける集計と並べ替えは、データ分析において欠かせない操作です。集計関数やGROUP BY
句を使ってデータを集約し、ORDER BY
句でその結果を並べ替えることによって、さまざまな形でデータを洞察することが可能になります。これらのテクニックを理解し、効果的に活用することで、データベース操作をさらに強化することができます。