PR

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

Database

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

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

SELECT MAX(カラム名) FROM テーブル名;
SQL MAX関数
Japanaeseカラムの最大値は80

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

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

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

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

スポンサーリンク

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

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

参考 SELECT文

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        |
  +----------+-----------+
*/

より実践的なサンプルコードはこちら。以下のサンプルコードの内容が理解できればMAX関数の利用方法はOKです。

/* sales_data テーブル
| id | product | sales_date  | sales_amount |
|----|---------|-------------|--------------|
| 1  | A       | 2023-04-01  | 100          |
| 2  | B       | 2023-04-01  | 200          |
| 3  | A       | 2023-04-02  | 150          |
| 4  | C       | 2023-04-02  | 300          |
| 5  | B       | 2023-04-03  | 250          |
| 6  | A       | 2023-04-03  | 120          |
| 7  | C       | 2023-04-03  | 350          |
|----|---------|-------------|--------------|
*/

-- sales_amountの最大値を取得する
SELECT MAX(sales_amount) AS max_sales_amount
FROM sales_data;

/* 結果
| max_sales_amount |
|------------------|
| 350              |
|------------------|
*/

-- sales_dateの最大値(最新の日付)を取得する
SELECT MAX(sales_date) AS latest_sales_date
FROM sales_data;

/* 結果
| latest_sales_date |
|-------------------|
| 2023-04-03        |
|-------------------|
*/

-- 各商品の最大のsales_amountを取得する
SELECT product, MAX(sales_amount) AS max_sales_amount
FROM sales_data
GROUP BY product;

/* 結果
| product | max_sales_amount |
|---------|------------------|
| A       | 150              |
| B       | 250              |
| C       | 350              |
|---------|------------------|
*/

SQLを1から学習したい方は

SQLやデータベースの仕組みを1から学習したい方(学び直したい方)向けに、現役エンジニア達のスキルを結集して 完全無料 のSQL教材を作成しました。

SQLは決して難しい技術ではないので、エンジニアであれば「当たり前のように」扱えて当然かも・・・?

とはいえ、案外SQLをちゃんと使ったことがない人も多いはずです。この機会に是非一度ご覧になってみてください。

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

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

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

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

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
DatabaseIT-Skills
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました