MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで複数のフィールドから最小値を取得する方法|LEAST()関数の使い方

MySQLで2つ以上のフィールド(カラム)の中から最小値を求めたい場合は、LEAST()関数を使用します。LEAST()関数は、引数として渡された複数の値の中で最も小さい値を返してくれる便利な関数です。

LEAST()関数の基本構文

SELECT LEAST(カラム名1, カラム名2, ...N) FROM テーブル名;

それでは、実際にテーブルを作成し、LEAST()関数の動きを確認していきましょう。

ステップ1:テーブルを作成する

まず、日付型のカラムを3つ持つテーブルを作成します。

mysql> create table DemoTable
-> (
-> Date1 date,
-> Date2 date,
-> Date3 date
-> );
Query OK, 0 rows affected (0.54 sec)

ステップ2:レコードを挿入する

次に、INSERT文を使ってテーブルにデータを追加します。

mysql> insert into DemoTable values('2019-03-31','2019-01-01','2019-03-05');
Query OK, 1 row affected (0.17 sec)

ステップ3:登録したレコードを確認する

SELECT文を実行して、テーブル内の全レコードを表示してみましょう。

mysql> select *from DemoTable;

出力結果

+------------+------------+------------+
| Date1      | Date2      | Date3      |
+------------+------------+------------+
| 2019-03-31 | 2019-01-01 | 2019-03-05 |
+------------+------------+------------+
1 row in set (0.00 sec)

LEAST()関数で最小値を取得する

それでは、3つのカラムの中から最小値を取得するクエリを見ていきましょう。

mysql> select least(Date1,Date2,Date3) from DemoTable;

出力結果

上記のクエリを実行すると、次のような結果が得られます。

+--------------------------+
| least(Date1,Date2,Date3) |
+--------------------------+
| 2019-01-01               |
+--------------------------+
1 row in set (0.04 sec)

このように、Date1〜Date3の3つのカラムの中で最も古い日付である「2019-01-01」が正しく返されました。

注意点:NULL値の扱いについて

LEAST()関数を使用する際は、引数のいずれかにNULLが含まれている場合、戻り値もNULLになるという点に注意が必要です。NULLが含まれる可能性があるカラムに対しては、IFNULL()やCOALESCE()関数と組み合わせて使用することをおすすめします。

  1. 【MySQL】単一のクエリで最小値と最大値を同時に取得する方法

    MySQLでは、UNIONを活用することで、たった1つのクエリでテーブル内の最小値と最大値を同時に取得できます。MIN()関数とMAX()関数をサブクエリとして組み合わせるのがポイントです。ここでは、テーブルの作成からデータの挿入、実際のクエリ実行まで順番に解説します。サンプルテーブルを作成するまず、CREATE TABLE文でテーブルを作成します。mysql> create table DemoTable ( Price int ); Query OK, 0 rows affected (0.57 sec)データを挿入する続いて、INSERT文でいくつかのレコードを追加します。

  2. MySQLで2つの日時(DATETIME)値の差を求める方法

    MySQLで2つの日時値の差を求める方法MySQLで2つのDATETIME型の値の差を求めるには、TIMESTAMPDIFF()関数を使用します。この関数を使うことで、秒・分・時間などの任意の単位で2つの日時の差を簡単に計算できます。まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable -> ( -> DueDatetime1 datetime, -> DueDatetime2 datetime -> );Query OK, 0 rows affected (0.86 sec)次に、INSE