【SQL基礎】MAX/MIN関数の基本構文
MAX関数は対象カラムの最大値を返す関数です。
MIN関数は対象カラムの最小値を返す関数です。
SELECT文と併せて使います。
SELECT MAX(対象カラム名)
FROM 対象テーブル名;
SELECT MIN(対象カラム名)
FROM 対象テーブル名;
MAX/MIN関数は、数値型のデータだけでなく日付型や文字列型のデータに対しても使用できます。
参考:データ型とは
本記事では例として以下のテーブル(テーブル名:teachers)を使用します。
1.数値型のデータに対してMAX/MIN関数を使用する。
数値型のデータに対してMAX/MIN関数を使用した場合には、単純に数字の大小を比較します。
例1.teachersテーブルのidカラムに対してMAX関数を使用する。
SELECT MAX(id) FROM teachers;
idカラムの最大の値である4を取得することができました。
2.日付型のデータに対してMAX/MIN関数を使用する。
日付型のデータに対してMAX/MIN関数を使用した場合、対象カラムの日付の新旧を比較します。
MAX関数の場合は最も新しい日付を取得します。
MIN関数の場合は最も古い日付を取得します。
例2.teachersテーブルのbirthdayカラムに対してMAX関数を使用する。
SELECT MAX(birthday) FROM teachers;
birthdayカラムの中で最も新しい値である1994-03-03を取得することができました。
3.文字列型のデータに対してMAX/MIN関数を使用する。
文字列型のデータに対してMAX/MIN関数を使用した場合、文字列の先頭から文字コードの大小を比較します。
MAX関数の場合は最も大きい文字コードを持つデータを取得します。
MIN関数の場合は最も小さい文字コードを持つデータを取得します。
※文字コード…コンピュータ内部で文字を表すのに使う数値のこと。
例3.teachersテーブルのnameカラムに対してMAX関数を使用する。
SELECT MAX(name) FROM teachers;
先頭の文字である「タ」、「ナ」、「ハ」、「テ」の文字コードを比較すると「ハ」が最大なので、「ハジメ」を取得します。
先頭の文字が同じである場合は二番目の文字を比較します。
二番目の文字も同じなら三番目の文字を…というように、先頭から順に大小比較していきます。
4.対象カラム内にNULLがある場合
対象カラム内にNULLがある場合、NULLは無視されます。
つまり、MAX/MIN関数の使用に特に影響はありません。
例4.teachersテーブルのscoreカラムに対してMAX関数を使用する。
SELECT MAX(score) FROM teachers;
scoreカラムはNULLを含みますが、最大の値である90を取得できています。
5.WHERE句で条件を絞り込んだ結果、該当する行が存在しなかった場合
MAX/MIN関数とWHERE句は併用することができます。
WHERE句を使って条件を絞り込んだ結果該当する行が存在しなかった場合、MAX/MIN関数はNULLを返します。
例5.idが5より大きいという条件を付けて、teachersテーブルのageカラムに対してMAX関数を使用する。
SELECT MAX(age) FROM teachers WHERE id > 5;
teachersテーブルにはidが5より大きいレコードは存在しません。
そのため、MAX関数はNULLを返します。
学習のポイント
・MAX/MIN関数は最大値/最小値を返す集約関数である。
・数値型だけでなく、日付型や文字列型のデータに対して使うことができる。
練習問題
以下からダウンロード可能です。
また、ダウンロードしたら以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。
worldcup2014.zip
[sql] CREATE DATABASE worldcup2014;use worldcup2014
source C:\worldcup2014.sql
[/sql]
1.2014年ワールドカップに参加した選手の中で最も背が高い選手の身長は何㎝でしょうか。
playersテーブル(id,country_id,uniform_num,position,name,club,birth,height,weightの9つのカラムで構成されている)を使って答えを導いてください。
2.2014年ワールドカップの最初の試合は何月何日に行われたでしょうか。
pairings_tmpテーブル(kickoff,my_country,enemy_countryの3つのカラムで構成されている)を使って答えを導いてください。