MAX()を使うとカラムの中のMAX値(最大値)を取得することができます。
MAX()はよく使うと聞いたので使い方を覚えようと思います。
動作環境
SQL FIDDLEでMySQL5.6、PostgreSQL9.6、SQLiteで動作確認しました。
下記文章は主にPostgreSQLで仕様で調べています。
MAX()とは
MAX()とはMAX関数とも呼ばれテーブルの中から指定したカラムの最大値を取得することができます。
反対にMIN()もあり、こちらは最小値を取得する時に使用されます。
集約関数という種類に分類されます。
構文
SELECT文での例。
SELECT MAX(カラム) FROM テーブル名
複数カラムを読み込む時はGroup Byを使って他の列はまとめる必要があります。
実際にMAX()を利用して最大値を取得してみよう!
サンプルコードで実際にMAX()の動きを確認してみます。
準備
以下のテーブルを使用します。
itemid | itemname | quantity | area |
---|---|---|---|
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
■ 結果
itemname | max |
---|---|
プリン | 60 |
ゼリー | 30 |
グループ化したことでプリンとゼリー、それぞれの最大値が表示されました。
上記のテーブルではさほど見た目の変化はありませんが、ItemNameとAreaごとに最大値を取得してみましょう。
SELECT
ItemName ,
AREA,
MAX(quantity)
FROM
item
GROUP BY
ItemName,
Area
※ PostgreSQLの場合Group ByではSELECTで登場する関数以外をGroup byに書く必要があります。MySQL, SQLliteでは全て書く必要はない。
■ 結果
itemname | area | max |
---|---|---|
プリン | 大阪 | 25 |
ゼリー | 大阪 | 20 |
ゼリー | 東京 | 30 |
プリン | 東京 | 60 |
おわり
Group byのことをいつも忘れてしまう。