MySQLでMAX、MINの書き方
MySQLでMAXおよびMIN関数は、テーブル内のデータに対して最大値や最小値を取得するために使用します。
これらの関数は数値データ、日付データ、文字列データに対して使用可能で、SQLクエリ内で一般的に使われます。
以下にそれぞれの使い方と例を説明します。
MAX関数
MAX関数は、指定したカラム内の最大値を返します。
数値データであれば最も大きな数値、日付データであれば最新の日付、文字列データではアルファベット順で最も後ろにある値を返します。
基本的な構文は以下の通りです。
SELECT MAX(column_name) FROM table_name;
例として、従業員テーブル(employees)から最も高い給与を取得するクエリを考えます。
この場合、給与が記録されているカラムがsalaryであるとすると、クエリは以下のようになります。
SELECT MAX(salary) FROM employees;
このクエリは、employeesテーブルから最大の給与額を返します。
もし、最大の給与を持つ従業員の名前も取得したい場合は、以下のように書けます。
SELECT name, MAX(salary) FROM employees;
ただし、このように直接使うとエラーが発生する可能性があります。
MAX関数と他のカラムを組み合わせて使用する場合には、通常GROUP BY句を使います。
SELECT name, salary FROM employees WHERE salary = (SELECT MAX(salary) FROM employees);
このクエリは、最も高い給与を持つ従業員の名前と給与を取得します。
MIN関数
MIN関数は、指定したカラム内の最小値を返します。
MAX関数と同様に、数値、日付、文字列に使用できます。
構文はMAX関数とほぼ同じです。
SELECT MIN(column_name) FROM table_name;
従業員テーブルから最も低い給与を取得するクエリは以下のようになります。
SELECT MIN(salary) FROM employees;
このクエリは、employeesテーブルから最小の給与額を返します。
同様に、最小の給与を持つ従業員の名前も取得したい場合は、次のように書けます。
SELECT name, salary FROM employees WHERE salary = (SELECT MIN(salary) FROM employees);
これで、最も低い給与を持つ従業員の情報が取得できます。
GROUP BY句との併用
MAXおよびMIN関数は、GROUP BY句と組み合わせて使用することで、グループごとの最大値・最小値を取得できます。
たとえば、部門ごとの最大給与を取得したい場合は、次のように書きます。
SELECT department, MAX(salary) FROM employees GROUP BY department;
このクエリは、各部門ごとに最も高い給与を返します。
同様に、部門ごとの最小給与を取得するには、以下のようにします。
SELECT department, MIN(salary) FROM employees GROUP BY department;
このクエリは、各部門ごとに最も低い給与を返します。
複数の条件を使用する場合
MAXやMIN関数は、WHERE句を使って特定の条件を満たすデータに絞って計算することも可能です。
たとえば、特定の部門に所属する従業員の中で最も高い給与を取得する場合は、次のように書きます。
SELECT MAX(salary) FROM employees WHERE department = 'Sales';
このクエリは、Sales部門の従業員の中で最も高い給与を返します。
同様に、MIN関数を使って特定の条件で最小値を取得する場合も、WHERE句を使えます。
HAVING句との併用
MAXやMIN関数をGROUP BY句と一緒に使用する場合、HAVING句を用いることで、グループ全体に対してさらに条件を追加することができます。
たとえば、給与の最大値が5000を超える部門だけを取得する場合は、以下のようにします。
SELECT department, MAX(salary) FROM employees GROUP BY department HAVING MAX(salary) > 5000;
このクエリは、最大給与が5000を超える部門のみを返します。
まとめ
MySQLにおけるMAXおよびMIN関数は、データの中から最大値や最小値を簡単に取得するための強力なツールです。
数値データ、日付データ、文字列データに対して利用可能であり、特定の条件やグループごとの最大・最小値を取得する際に便利です。
WHERE句やGROUP BY句、HAVING句などと組み合わせて使用することで、より複雑なクエリにも対応できます。