MAX値を取得してみる!SQL超初心者の勉強

MAX()を使うとカラムの中のMAX値(最大値)を取得することができます。
MAX()はよく使うと聞いたので使い方を覚えようと思います。

動作環境

SQL FIDDLEでMySQL5.6、PostgreSQL9.6、SQLiteで動作確認しました。
下記文章は主にPostgreSQLで仕様で調べています。

MAX()とは

MAX()とはMAX関数とも呼ばれテーブルの中から指定したカラムの最大値を取得することができます。

反対にMIN()もあり、こちらは最小値を取得する時に使用されます。
集約関数という種類に分類されます。

構文

SELECT文での例。

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

複数カラムを読み込む時はGroup Byを使って他の列はまとめる必要があります。

実際にMAX()を利用して最大値を取得してみよう!

サンプルコードで実際にMAX()の動きを確認してみます。

準備

以下のテーブルを使用します。

itemiditemnamequantityarea
1プリン25大阪
2ゼリー20大阪
3ゼリー30東京
4プリン15大阪
5プリン60東京

上記テーブルの作成用コードです。

-- CREATE文 item テーブル
CREATE TABLE item (
ItemID numeric(8, 0) unique not null,
ItemName character varying (20),
Quantity numeric(8, 0),
AREA character varying (20),
primary key(ItemID)
);
-- itemテーブル用INSERT文
insert into item
values(0001, 'プリン', 25, '大阪'),
(0002, 'ゼリー', 20, '大阪'),
(0003, 'ゼリー', 30, '東京'),
(0004, 'プリン', 15,'大阪'),
(0005, 'プリン', 60, '東京');

Max()サンプルコード 最大値のみ取得

SELECT
MAX(quantity)
FROM
item

■ 結果

max
60

Max()サンプルコード 最大値と他の列取得

ItemNameごとに最大値を取得します。
集約関数を使用する際に他の列も合わせて表示する際にはGroup Byを使用して列をグループ化する必要があります。

SELECT
ItemName ,
MAX(quantity)
FROM
item
GROUP BY
ItemName

■ 結果

itemnamemax
プリン60
ゼリー30

グループ化したことでプリンとゼリー、それぞれの最大値が表示されました。

上記のテーブルではさほど見た目の変化はありませんが、ItemNameとAreaごとに最大値を取得してみましょう。

SELECT
ItemName ,
AREA,
MAX(quantity)
FROM
item
GROUP BY
ItemName,
Area

※ PostgreSQLの場合Group ByではSELECTで登場する関数以外をGroup byに書く必要があります。MySQL, SQLliteでは全て書く必要はない。

■ 結果

itemnameareamax
プリン大阪25
ゼリー大阪20
ゼリー東京30
プリン東京60

おわり

Group byのことをいつも忘れてしまう。