概要: このチュートリアルでは、SQL SUM関数を使用してグループ内の最大値を見つける方法を学習します。
SQL MAX関数の紹介
SQLは、値の集合の中で最大値を見つけることを可能にするMAX関数を提供します。以下にMAX関数の構文を示します。
MAX(expression)
Code language: SQL (Structured Query Language) (sql)
MAX関数はNULL値を無視します。
SUM、COUNT、AVG関数とは異なり、DISTINCTオプションはMAX関数には適用できません。
SQL MAX関数の例
employees
テーブルを使用して、MAX関数の動作方法を示します。

次のSELECT文は、employees
テーブルの従業員の最高(最大)給与を返します。
SELECT
MAX(salary)
FROM
employees;
Code language: SQL (Structured Query Language) (sql)
最高給与の従業員を取得するには、次のようにサブクエリを使用します。
SELECT
employee_id,
first_name,
last_name,
salary
FROM
employees
WHERE
salary = (
SELECT
MAX(salary)
FROM
employees
);
Code language: SQL (Structured Query Language) (sql)

サブクエリは最高給与を返します。外部クエリは、最高給与に等しい給与を持つ従業員を取得します。
GROUP BYを使用したSQL MAXの例
通常、GROUP BY句と組み合わせてMAX関数を使用し、グループごとの最大値を見つけます。
たとえば、MAX関数を使用して、各部署の従業員の最高給与を次のように見つけることができます。
SELECT
department_id,
MAX(salary)
FROM
employees
GROUP BY
department_id;
Code language: SQL (Structured Query Language) (sql)

結果に部署名を含めるには、次のようにemployeesテーブルとdepartmentsテーブルを結合します。
SELECT
d.department_id,
department_name,
MAX(salary)
FROM
employees e
INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
e.department_id;
Code language: SQL (Structured Query Language) (sql)

ORDER BYを使用したSQL MAXの例
他の集計関数と同様に、MAX関数の結果に基づいて結果セットをソートするには、MAX関数をORDER BY句に配置する必要があります。
たとえば、次の文は、各部署の従業員の最高給与を返し、最高給与に基づいて結果セットをソートします。
SELECT
d.department_id,
department_name,
MAX(salary)
FROM
employees e
INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
e.department_id
ORDER BY
MAX(salary) DESC;
Code language: SQL (Structured Query Language) (sql)

HAVINGを使用したSQL MAXの例
HAVING句でMAX関数を使用して、GROUP BY句で集計されたグループに条件を追加します。
たとえば、最高給与が12000を超える従業員がいる部署を取得するには、次のようにHAVING句でMAX関数を使用します。
SELECT
d.department_id,
department_name,
MAX(salary)
FROM
employees e
INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
e.department_id
HAVING
MAX(salary) > 12000;
Code language: SQL (Structured Query Language) (sql)

このチュートリアルでは、MAX関数を使用して値のグループ内の最大値を見つける方法を示しました。