MAX()は最大値を返すOracle SQL関数です。テーブルのカラムの最大値を求めるときなどに使います。この記事では、MAX関数の使い方をサンプルを交えて紹介しています。
最大値のレコードを取得するには、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