SQLのMAX・MIN関数には数値以外にも文字列を指定することが出来ます。 「最大値/ 最小値」と言われると数字しかイメージしてこなかったので、恥ずかしながらとても驚きました。
このあたりの動きをSQL Fiddleを使って確認していきます。
今回もSQL Fiddleを使います。 エンジンはPostgresSQL 9.6です。
データの準備
まずはデータを準備します。 英単語辞書に載っている最初の単語と最後の単語を検索しデータとしました。
CREATE TABLE test ("id" int, "name" varchar(8)) ; INSERT INTO test ("id", "name") VALUES (1, 'aardvark'), (2, 'abandon'), (3, 'aback'), (4, 'ZZZ') ;
MAX関数
まずはMAX関数です。 アルファベットはA→Zへ大きくなっていくので、Zを含むものが返されます。
select max(name) from test
| max | |-----| | ZZZ |
MIN関数
次にMIN関数です。 Aに向かって小さくなるので、aardvarkが返されます。
select min(name) from test
| min | |----------| | aardvark |
日本語でも確認してみる
データを日本語にして動きを確認してみます。
CREATE TABLE test ("id" int, "name" varchar(10)) ; INSERT INTO test ("id", "name") VALUES (1, 'おはよう'), (2, 'こんにちは'), (3, 'こんばんは') ;
MAX関数はこんばんはが返ってきています。
select max(name) from test;
| max | |-------| | こんばんは |
MIN関数はおはようが返ってきています。
select min(name) from test;
| min | |------| | おはよう |
注意するべきところ
次のデータを投入したときにMIN関数が返すものは、「おはよう」の結果から「おはようございます」になると思いますが、実は違う結果になります。
CREATE TABLE test ("id" int, "name" varchar(10)) ; INSERT INTO test ("id", "name") VALUES (1, 'おはようございます'), (2, 'こんにちは'), (3, 'こんばんは') ;
今回の場合は「こんにちは」が返ってきます。 これは想定外の動きをしているわけではなく、文字列型の場合は文字コードとしての判定がおこなわれているからになります。 実際に使う場合は、文字コードで判定されていることを忘れずに使ってほしいと思います。
| min | |-------| | こんにちは |