【SQL】MAX関数(SELECT MAX)を1分でわかりやすく解説

Database

指定したカラムの "最小値" を取得するMAX関数の使い方を初心者向けにわかりやすく1から解説します。

MAX関数は指定したカラムのレコードの最小値を取得します。"MAX" は最大を意味する "Maximum" の略です。

SQL MAX関数
Japanaeseカラムの最大値は80

上記の例では、最大値である "80" が結果として取得できます。

このページではSQLにおけるMAX関数の利用方法・構文ルールを初心者向けにご説明します。

このページで学べる内容
  • MAX関数の使い方・構文ルール
  • GROUP BY句を利用した集計方法

プログラマーやシステムエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識です。是非最後までご覧ください。

スポンサーリンク

SQL:MAX関数の使い方・構文ルール

SELECT MAX(カラム名) FROM テーブル名;

MAX関数はSUM関数と全く同様の構文ルールです。

"MAX( )" のように最大値を求めたいカラムを( )で囲むだけ。

ここでは以下のようなテーブルを例にMAX関数の利用方法と処理結果を見ていきます。

SELECT MAX

成績の一覧テーブルから、Japanaeseカラムのレコードの最大値を取得したい場合は以下のように記述します。

SELECT MAX(Japanaese) FROM PointList;

-- Japanaeseカラムの最大値は80
/* 実行結果
  +----------+
  | MAX      |
  +----------+
  | 80       |
*/

SUM関数/AVG関数など他の集約関数同様に、複数のカラムを指定することも可能です。

SELECT MAX(Japanese), MAX(Math), MAX(English)
  FROM PointList;

/* 実行結果
  +------------------+------------------+------------------+
  | MIN(Japanaese)   | MIN(Math)        |MIN(English)      |
  +------------------+------------------+------------------+
  | 80               | 800              |80                |
*/

参考までにSUM関数のサンプルコードも記載しますが、構文ルールは全く同様であることが分かります。

SELECT SUM(Japanese), SUM(Math), SUM(English)
  FROM PointList;

/* 実行結果
  +------------------+------------------+------------------+
  | SUM(Japanaese)   | SUM(Math)        |SUM(English)      |
  +------------------+------------------+------------------+
  | 360              | 3600             |360               |
*/

SUM関数/AVG関数と同様にMAX関数では必ずカラムを指定する必要があります。

ワイルドカード*を使用することはできません。

SELECT MAX(*) FROM PointList;

-- MAX関数の引数には「*」を利用することはできません

MAX関数:NULL値の扱い

指定したカラムにNULL値が存在する場合、MAX関数はNULL値を無視します。

MAX関数は、計算の前にNULLを除外しその後で合計を計算するため結果は以下のようになります。

SELECT MAX(Japanese), MAX(Math), MAX(English)
  FROM PointList;

/* 実行結果
  +------------------+------------------+------------------+
  | MAX(Japanaese)   | MAX(Math)        |MAX(English)      |
  +------------------+------------------+------------------+
  | 10               | 100              |10                |
*/

また、ほとんどこのパターンは存在しませんが、レコードがすべてNULLだった場合はNULLが返って来ます。

MIN関数:全レコードNULLの場合
SELECT MAX(Japanese), MAX(Math), MAX(English)
  FROM PointList;

/* 実行結果
  +------------------+------------------+------------------+
  | MAX(Japanaese)   | MAX(Math)        |MAX(English)      |
  +------------------+------------------+------------------+
  | NULL             | NULL             |NULL              |
*/

日付の最小値を取得する

SUM関数やAVG関数では、指定したカラムが数値型でない場合はエラーが発生します。

しかしMAX関数の場合は原則どのようなデータ型のカラムに対しても適用することが可能です。例えば以下のように日付の最大値を取得することも可能です。

SELECT MAX(Birthday) FROM PointList;

-- Birthdayカラムの最大値は1990/1/8
/* 実行結果
  +----------+
  | MAX      |
  +----------+
  | 1990/1/8 |
*/

MAX関数:GROUP BY句との合わせ技

MAX関数と "GROUP BY" 句を併用すると、指定したグループごとに最小値を求め結果を得ることが可能です。

先ほどのPointListテーブルに性別を示すカラムを追加して考えてみましょう。

男性の最大値は10/女性の最大値は80です。

GROUP BY句にFM列を指定して実行した結果がこちら。

SELECT FM, MAX(Japanese)
  FROM PointList
 GROUP BY FM;

/* 実行結果
  +----------+-----------+
  | FM       | MAX       |
  +----------+-----------+
  | 男       | 10        |
  | 女       | 80        |
*/

ご覧のように、指定したグループごとに結果を取得してくれます。

MAX関数のまとめ
  • MAX関数は指定したカラムの最大値を取得できる
  • MAX関数は数値型以外のカラム(ex 日付型など)にも適用可能
SELECT MAX(Japanese), MAX(Math), MAX(English)
  FROM PointList;

/* 実行結果
  +------------------+------------------+------------------+
  | MAX(Japanaese)   | MAX(Math)        |MAX(English)      |
  +------------------+------------------+------------------+
  | 80               | 800              |80                |
*/
  • GROUP BY句と組み合わせて利用することでグループごとに最大値を取得することが可能
SELECT FM, MAX(Japanese)
  FROM PointList
 GROUP BY FM;

/* 実行結果
  +----------+-----------+
  | FM       | MAX       |
  +----------+-----------+
  | 男       | 10        |
  | 女       | 80        |
*/

システムエンジニアを目指したい方は

システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。

正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。

システムエンジニア向けに「できるエンジニア」になる方法を1から解説しておりますので、是非ご覧ください。

タイトルとURLをコピーしました