MAX()は最大値を返すOracle SQL関数です。テーブルのカラムの最大値を求めるときなどに使います。この記事では、MAX関数の使い方をサンプルを交えて紹介しています。
DBMS | MAX |
---|---|
MySQL | ✓ |
Oracle | ✓ |
PostgreSQL | ✓ |
SQL Server | ✓ |
最大値のレコードを取得するには、MAX関数を使う。
SELECT MAX(sal) FROM emp
SELECT MAX(ALL sal) FROM emp
SELECT MAX(DISTINCT sal) FROM emp
ALLを指定すると、値が重複するレコードすべてを対象とする。
DISTINCTを指定すると、値が重複するレコードのうち、ひとつだけを対象とする。
ただし、ALLやDISTINCTを指定しても最大値は変わらない。
MAX関数の集計対象となる列にNULLが含まれていても、最大値を求めることができる。すべての列がNULLだった場合、MAX関数はNULLを返す。
日付(DATE型)に対してもMAX関数を使える。日付に対してMAX関数を使ったときは日付の最大値、つまり最新の日付が返される。
たとえば次のようなテーブルがあったとする。
ename | hiredate |
---|---|
Fujihira Kano | 2015/05/06 17:30:00 |
Tanaka Miku | 2017/05/07 18:00:00 |
Satou Neo | 2019/05/06 15:30:00 |
雇用日付(hiredate)の最大値(最新日付)を求めるには、次のSQLを使う。
SELECT MAX(hiredate) FROM emp
上記SQLの実行結果は次のようになる。
MAX(hiredate) |
---|
2019/05/06 15:30:00 |
文字列に対してもMAX関数を使うことができる。
たとえば次のようなテーブルがあったとする。
ename |
---|
Fujihira Kano |
Tanaka Miku |
Satou Neo |
社員名(ename)の最大値を求めるには、次のSQLを使う。
SELECT MAX(ename) FROM emp
上記SQLの実行結果は次のようになる。
MAX(ename) |
---|
Satou Neo |
あくまでも文字列として比較されることに注意が必要である。たとえば、文字列で「2」と「10」を比較すると、先頭の文字から順に比較されるため、最大値は「2」である。
条件にMAX関数を使うこともできる。
給与(sal)が最大のレコードを取得するには、次のSQLを使う。
SELECT * FROM emp WHERE sal = (SELECT MAX(sal) FROM emp)
グルーピングしてグループごとの最大値を返す例を示す。このサンプルでは、社員テーブルから部署(deptno)ごとに給与の最大値を取得している。
SELECT deptno, MAX(sal) FROM emp GROUP BY deptno
レコードの複数列から最大値を取得するには、MAX関数ではなく、GREATEST関数を使う。
SELECT GREATEST(sal, comm) FROM emp
MAXは最大値を返す関数であるが、逆に最小値を求める場合には、MIN関数を使う。
PostgreSQL で最大値のレコードを取得するには、MAX関数を使う。使い方はOracleと同じである。
SELECT MAX(sal) FROM emp
SQL Server で最大値のレコードを取得するには、MAX関数を使う。使い方はOracleと同じである。
SELECT MAX(sal) FROM emp
SELECT MAX(ALL sal) FROM emp
SELECT MAX(DISTINCT sal) FROM emp