指定したカラムの "最小値" を取得するMAX関数の使い方を初心者向けにわかりやすく1から解説します。
MAX関数は指定したカラムのレコードの最小値を取得します。"MAX" は最大を意味する "Maximum" の略です。
SELECT MAX(カラム名) FROM テーブル名;
上記の例では、最大値である "80" が結果として取得できます。
このページではSQLにおけるMAX関数の利用方法・構文ルールを初心者向けにご説明します。
プログラマーやシステムエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識です。是非最後までご覧ください。
SQL:MAX関数の使い方・構文ルール
SELECT MAX(カラム名) FROM テーブル名;
参考 SELECT文
MAX関数はSUM関数などの他の集約関数と全く同様の構文ルールです。
"MAX( )" のように最大値を求めたいカラムを( )で囲むだけ。
ここでは以下のようなテーブルを例に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 | +------------------+------------------+------------------+ */
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が返って来ます。
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関数の利用方法は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から解説しておりますので、是非ご覧ください。