PR

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

Database

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

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

MIN関数,カラムの最小値は10
MIN関数:Japanaeseカラムの最小値は10

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

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

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

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

スポンサーリンク

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SELECT MIN(カラム名) FROM テーブル名;
SELECT MIN(カラム名) FROM テーブル名;
SELECT MIN(カラム名) FROM テーブル名;

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

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

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

SELECT MIN

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SELECT MIN(Japanaese) FROM PointList;
-- Japanaeseカラムの最小値は10
/* 実行結果
+----------+
| MIN |
+----------+
| 10 |
*/
SELECT MIN(Japanaese) FROM PointList; -- Japanaeseカラムの最小値は10 /* 実行結果 +----------+ | MIN | +----------+ | 10 | */
SELECT MIN(Japanaese) FROM PointList;

-- Japanaeseカラムの最小値は10
/* 実行結果
  +----------+
  | MIN      |
  +----------+
  | 10       |
*/

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SELECT MIN(Japanese), MIN(Math), MIN(English)
FROM PointList;
/* 実行結果
+------------------+------------------+------------------+
| MIN(Japanaese) | MIN(Math) |MIN(English) |
+------------------+------------------+------------------+
| 10 | 100 |10 |
*/
SELECT MIN(Japanese), MIN(Math), MIN(English) FROM PointList; /* 実行結果 +------------------+------------------+------------------+ | MIN(Japanaese) | MIN(Math) |MIN(English) | +------------------+------------------+------------------+ | 10 | 100 |10 | */
SELECT MIN(Japanese), MIN(Math), MIN(English)
  FROM PointList;

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SELECT SUM(Japanese), SUM(Math), SUM(English)
FROM PointList;
/* 実行結果
+------------------+------------------+------------------+
| SUM(Japanaese) | SUM(Math) |SUM(English) |
+------------------+------------------+------------------+
| 360 | 3600 |360 |
*/
SELECT SUM(Japanese), SUM(Math), SUM(English) FROM PointList; /* 実行結果 +------------------+------------------+------------------+ | SUM(Japanaese) | SUM(Math) |SUM(English) | +------------------+------------------+------------------+ | 360 | 3600 |360 | */
SELECT SUM(Japanese), SUM(Math), SUM(English)
  FROM PointList;

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

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SELECT MIN(*) FROM PointList;
-- MIN関数の引数には「*」を利用することはできません
SELECT MIN(*) FROM PointList; -- MIN関数の引数には「*」を利用することはできません
SELECT MIN(*) FROM PointList;

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

MIN関数:NULL値の扱い

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SELECT MIN(Japanese), MIN(Math), MIN(English)
FROM PointList;
/* 実行結果
+------------------+------------------+------------------+
| MIN(Japanaese) | MIN(Math) |MIN(English) |
+------------------+------------------+------------------+
| 10 | 100 |10 |
*/
SELECT MIN(Japanese), MIN(Math), MIN(English) FROM PointList; /* 実行結果 +------------------+------------------+------------------+ | MIN(Japanaese) | MIN(Math) |MIN(English) | +------------------+------------------+------------------+ | 10 | 100 |10 | */
SELECT MIN(Japanese), MIN(Math), MIN(English)
  FROM PointList;

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

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

MIN関数:全レコードNULLの場合
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SELECT MIN(Japanese), MIN(Math), MIN(English)
FROM PointList;
/* 実行結果
+------------------+------------------+------------------+
| MIN(Japanaese) | MIN(Math) |MIN(English) |
+------------------+------------------+------------------+
| NULL | NULL |NULL |
*/
SELECT MIN(Japanese), MIN(Math), MIN(English) FROM PointList; /* 実行結果 +------------------+------------------+------------------+ | MIN(Japanaese) | MIN(Math) |MIN(English) | +------------------+------------------+------------------+ | NULL | NULL |NULL | */
SELECT MIN(Japanese), MIN(Math), MIN(English)
  FROM PointList;

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

日付の最小値を取得する

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SELECT MIN(Birthday) FROM PointList;
-- Birthdayカラムの最小値は1990/1/1
/* 実行結果
+----------+
| MIN |
+----------+
| 1990/1/1 |
*/
SELECT MIN(Birthday) FROM PointList; -- Birthdayカラムの最小値は1990/1/1 /* 実行結果 +----------+ | MIN | +----------+ | 1990/1/1 | */
SELECT MIN(Birthday) FROM PointList;

-- Birthdayカラムの最小値は1990/1/1
/* 実行結果
  +----------+
  | MIN      |
  +----------+
  | 1990/1/1 |
*/

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

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

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

男性の最小値は10/女性の最小値は20です。

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SELECT FM, MIN(Japanese)
FROM PointList
GROUP BY FM;
/* 実行結果
+----------+-----------+
| FM | MIN |
+----------+-----------+
| 男 | 10 |
| 女 | 20 |
*/
SELECT FM, MIN(Japanese) FROM PointList GROUP BY FM; /* 実行結果 +----------+-----------+ | FM | MIN | +----------+-----------+ | 男 | 10 | | 女 | 20 | */
SELECT FM, MIN(Japanese)
  FROM PointList
 GROUP BY FM;

/* 実行結果
  +----------+-----------+
  | FM       | MIN       |
  +----------+-----------+
  | 男       | 10        |
  | 女       | 20        |
*/

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

MIN関数のまとめ
  • MIN関数は指定したカラムの最小値を取得できる
  • MIN関数は数値型以外のカラム(ex 日付型など)にも適用可能
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SELECT MIN(Japanese), MIN(Math), MIN(English)
FROM PointList;
/* 実行結果
+------------------+------------------+------------------+
| MIN(Japanaese) | MIN(Math) |MIN(English) |
+------------------+------------------+------------------+
| 10 | 100 |10 |
*/
SELECT MIN(Japanese), MIN(Math), MIN(English) FROM PointList; /* 実行結果 +------------------+------------------+------------------+ | MIN(Japanaese) | MIN(Math) |MIN(English) | +------------------+------------------+------------------+ | 10 | 100 |10 | */
SELECT MIN(Japanese), MIN(Math), MIN(English)
  FROM PointList;

/* 実行結果
  +------------------+------------------+------------------+
  | MIN(Japanaese)   | MIN(Math)        |MIN(English)      |
  +------------------+------------------+------------------+
  | 10               | 100              |10                |
*/
  • GROUP BY句と組み合わせて利用することでグループごとに最小値を取得することが可能
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SELECT FM, MIN(Japanese)
FROM PointList
GROUP BY FM;
/* 実行結果
+----------+-----------+
| FM | MIN |
+----------+-----------+
| 男 | 10 |
| 女 | 20 |
*/
SELECT FM, MIN(Japanese) FROM PointList GROUP BY FM; /* 実行結果 +----------+-----------+ | FM | MIN | +----------+-----------+ | 男 | 10 | | 女 | 20 | */
SELECT FM, MIN(Japanese)
  FROM PointList
 GROUP BY FM;

/* 実行結果
  +----------+-----------+
  | FM       | MIN       |
  +----------+-----------+
  | 男       | 10        |
  | 女       | 20        |
*/

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

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

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

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

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