ywork2020.com

Title

列の最大値を求める

目次 (INDEX)

MAX とは

ここで説明する MAX とは次の語句からなる SQL の関数です。
max
読み: マックス
意味: 最大

目次に戻る

MAX 関数の概要

この関数は、引数に列を指定することにより、テーブルの列のデータから最大値を求めることができます。

この関数は SQL の集約関数の 1つです。

目次に戻る

サンプルデータベースとテーブルの構造

データ抽出用のサンプルテーブルが必要でしたので事前に作成しています。

現在、データベースにはサンプルとして以下に示す構造の test テーブルを作成しており、 そのテーブルに 6人のペーパーテストの成績を登録した状態になっています。

サンプルコード: テーブルの作成

サンプルテーブルを以下のクエリで作成しました。

CREATE TABLE test(
	id int(11),
	氏名 varchar(20),
	国語 int(11),
	算数 int(11),
	理科 int(11),
	社会 int(11),
	英語 int(11)
);
id氏名国語算数理科社会英語
データデータデータデータデータデータデータ
データデータデータデータデータデータデータ

目次に戻る

サンプルコードと実行結果

ここからは実際に稼働しているデータベースに接続してクエリを実行していきます。 下記に配置された各ボタンをクリックすると、ボタンに書かれているサンプルクエリを実行して結果を表示します。

サンプルコード: SQL (SELECT 文の基本的な使い方)

SELECT * FROM テーブル名;

これはテーブルデータを抽出するための基本構文です。
指定したテーブルのデータを全件、全フィールドで抽出します。 この単純なクエリはデータ量が少ない場合や開発段階では利用することが多いと思いますが、実際の運用では使いません。

実行:

サンプルコード: SQL (MAX 関数で列の最大値を求める)

SELECT MAX(列名) FROM テーブル名;
実行:

説明:
セレクト文で MAX 関数を使って算数の列の最大値を求めています。

クエリとしては、これで問題ありません。 しかし、この単純なクエリだけでは最大値は求められますが、例えば最高得点の生徒を照会したい場合などには あまり実用的ではないようです。いくつかの照会方法が考えられますが、副問合せを使う方法が無難だと思いますので 次項の SQL を参考にしていただければ幸いです。

サンプルコード: SQL (副問合せ文に MAX 関数を使って最大値のレコードを照会する)

SELECT * FROM テーブル名 WHERE カラム名 = (副問合せ文);
実行:

前項からの引き続きとなりますが、これは MAX 関数を副問合せ文に使用した例です。 副問合せとは「親 SELECT 文」の WHERE 句の条件に「子 SELECT 文」を使ったものと表現したら分かりやすいでしょうか。 つまり、SELECT 文の中に SELECT 文が入れ子になっているものを副問合せ文といいます。

説明:
副問合せ文で MAX 関数を使って算数の列の最大値を求め、 その結果を本問合せ文の抽出条件として利用しています。

この方法ならカラムの最大値を条件に行を照会できるので無難なクエリだと思います。

目次に戻る

補足: GROUP BY 句との組み合わせ

この関数は SQL の集約関数の 1つです。 このページのサンプルでは単純な使用方法と WHERE 句でのサブクエリに組み込んで説明しましたが、 集約関数は GROUP BY 句との組み合わせで威力を発揮する関数です。 例えば次のようなテーブルデータがあったとします。

名前得点
Aさん160
Aさん110
Bさん130
Aさん150
Bさん120
Bさん100

このテーブルに以下のクエリを発行します。

SELECT 名前, MAX(得点) AS 最高得点, MIN(得点) AS 最低得点 FROM テーブル名 GROUP BY 名前;

結果:
名前最高得点最低得点
Aさん160110
Bさん130100

上記のように A さんと B さんの得点を個別に集約して最高得点と最低得点を求めることができます。 詳細は、GROUP BY (グループバイ) を参考にしていただければ幸いです。

目次に戻る

SQL の仕様上の注意点

※ SQL の予約句はアルファベットの大文字と小文字を区別しませんが、 任意で作成したデータベースやテーブル、カラムの名前などは区別されるので注意が必要です。

目次に戻る