MariaDB の SQL 文と構造における MAX 関数:詳細解説と応用例
MAX 関数は、指定した列から最大値を取得する SQL 関数です。単一の列から最大値を取得するだけでなく、複数の列の最大値を比較して最大値を取得するなど、様々な用途に使用できます。
構文
MAX(column_name)
column_name
: 最大値を取得したい列の名前
例
SELECT MAX(salary)
FROM employees;
このクエリは、employees
テーブルの salary
列から最大給与を取得します。
引数
MAX 関数は、以下の引数を受け取ることができます。
OVER()
: ウィンドウ関数として使用します。DISTINCT
: 重複する値を除外します。column_name
: 最大値を取得したい列の名前
DISTINCT オプション
DISTINCT オプションを使用すると、重複する値を除外して最大値を取得できます。
SELECT MAX(DISTINCT salary)
FROM employees;
このクエリは、employees
テーブルの salary
列から重複する給与を除外して最大給与を取得します。
OVER() オプション
OVER() オプションを使用すると、ウィンドウ関数として MAX 関数を使用できます。ウィンドウ関数を使用すると、特定の行グループ内の最大値を取得できます。
SELECT department_id, MAX(salary) OVER (PARTITION BY department_id)
FROM employees;
このクエリは、employees
テーブルの各部門における最大給与を取得します。
MAX 関数の注意点
- 列に値がない場合は、NULL が返されます。
- NULL 値は最大値として考慮されません。
応用例
MAX 関数は、様々な場面で使用できます。以下に、いくつかの例を示します。
- ウィンドウ関数を使用して、特定の行グループ内の最大値を取得する
- 複数の列の最大値を比較して最大値を取得する
- 特定の列における最大値を取得する
SELECT MAX(salary)
FROM employees;
複数の列の最大値を比較して最大値を取得する
SELECT MAX(price), MAX(quantity)
FROM products;
このクエリは、products
テーブルの price
列と quantity
列の最大値を比較して、それぞれ最大の値を取得します。
DISTINCT オプションを使用して重複する値を除外する
SELECT MAX(DISTINCT salary)
FROM employees;
OVER() オプションを使用してウィンドウ関数として使用する
SELECT department_id, MAX(salary) OVER (PARTITION BY department_id)
FROM employees;
条件付きで最大値を取得する
SELECT MAX(salary)
FROM employees
WHERE department_id = 1;
このクエリは、employees
テーブルの department_id
が 1 の従業員の最大給与を取得します。
SELECT department_id, AVG(salary), MAX(salary)
FROM employees
GROUP BY department_id;
サブクエリを使用する
SELECT (SELECT MAX(salary) FROM employees) AS max_salary;
このクエリは、employees
テーブルの salary
列から最大給与を取得するサブクエリを使用して、MAX 関数の代わりに最大値を取得します。
CASE 式を使用する
SELECT salary,
CASE WHEN salary = (SELECT MAX(salary) FROM employees)
THEN '最大値'
ELSE ''
END AS is_max
FROM employees;
このクエリは、CASE 式を使用して、employees
テーブルの各行の salary
列の値と、employees
テーブル全体の最大給与を比較し、一致する場合は '最大値' を、そうでない場合は空文字列を出力します。
ウィンドウ関数を使用する
SELECT salary,
ROW_NUMBER() OVER (ORDER BY salary DESC) AS rank
FROM employees;
このクエリは、ウィンドウ関数 ROW_NUMBER
を使用して、employees
テーブルの salary
列の値を降順に並べ替え、各行に順位を割り当てます。その後、順位が 1 の行のみを選択することで、最大値を取得します。
GROUP BY 句と集計関数を使用する
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id;
このクエリは、employees
テーブルを department_id
列でグループ化し、各グループにおける最大給与を MAX
集計関数を使用して取得します。
最適な代替方法の選択
最適な代替方法は、データ量、パフォーマンス要件、必要な機能などによって異なります。
- グループ化されたデータの最大値を取得する必要がある場合は、GROUP BY 句と集計関数が最適な方法です。
- パフォーマンスが重要であれば、ウィンドウ関数がより効率的な場合があります。
- データ量が少ない場合は、サブクエリや CASE 式がシンプルな解決策となる場合があります。
上記以外にも、MAX 関数の代替方法はいくつかあります。
- ユーザー定義関数を作成する
- カーソルを使用する