【保存版】MariaDBのSQL文で最小値をスマートに抽出!LEAST関数マスターガイド
構文
LEAST(value1, value2, ..., valueN)
引数
value1, value2, ..., valueN
: 比較対象となる値。型は整数、実数、文字列など、様々です。
戻り値
- 引数の中で最も小さい値。引数が全てNULLの場合はNULLを返します。
型
- 戻り値の型は、引数の型のうち、最も一般的な型になります。
- 例えば、整数と実数の引数を指定した場合、戻り値は実数となります。
- 文字列と数値の引数を指定した場合、戻り値は文字列となります。
注意点
- 大文字小文字の区別がある場合は、文字列比較となります。
- 引数の型が異なる場合、比較方法は以下のようになります。
- 戻り値の型が整数型の場合、全ての引数が整数型として比較されます。
- 戻り値の型が実数型の場合、全ての引数が実数型として比較されます。
- いずれかの引数が文字列型の場合、全ての引数が文字列型として比較されます。
例
-- 整数引数の例
SELECT LEAST(2, 1, 3);
+------------+
| LEAST(2,1,3) |
+------------+
| 1 |
+------------+
-- 実数引数の例
SELECT LEAST(3.14, 1.59, 2.71);
+-----------------------+
| LEAST(3.14,1.59,2.71) |
+-----------------------+
| 1.59 |
+-----------------------+
-- 文字列引数の例
SELECT LEAST('apple', 'banana', 'cherry');
+-------------------+
| LEAST('apple','banana','cherry') |
+-------------------+
| apple |
+-------------------+
-- 型変換の例
SELECT LEAST(1, 3.14, '5');
+-------------------+
| LEAST(1,3.14,'5') |
+-------------------+
| 1 |
+-------------------+
-- NULLの例
SELECT LEAST(NULL, 2, 3);
+------------+
| LEAST(NULL,2,3) |
+------------+
| NULL |
+------------+
LEAST関数は、様々な場面で役立ちます。
- データの整合性を保つ
- 条件に応じて異なる値を返す
- 複数の値の中で最小値を取得する
例
- 顧客情報のうち、年齢が最も若い顧客のIDを取得する
SELECT customer_id
FROM customers
ORDER BY age
LIMIT 1;
上記のようなクエリは、以下のクエリで置き換えることができます。
SELECT customer_id
FROM customers
WHERE age = LEAST(age);
- 在庫数が最も少ない商品の商品IDと在庫数を取得する
SELECT product_id, stock_quantity
FROM products
ORDER BY stock_quantity
LIMIT 1;
SELECT product_id, stock_quantity
FROM products
WHERE stock_quantity = LEAST(stock_quantity);
- 注文金額が100ドル未満の場合は送料を無料にする
SELECT order_id, shipping_fee
FROM orders;
SELECT order_id,
CASE WHEN order_amount < 100 THEN 0 ELSE shipping_fee END AS shipping_fee
FROM orders;
上記のように、LEAST関数は条件に応じて異なる値を返すことができます。
基本的な使い方
例1:複数の整数の最小値を取得する
SELECT LEAST(1, 2, 3);
このクエリは、1、2、3 の中で最小値である 1 を返します。
例2:複数の実数の最小値を取得する
SELECT LEAST(3.14, 1.59, 2.71);
このクエリは、3.14、1.59、2.71 の中で最小値である 59 を返します。
例3:複数の文字列の最小値を取得する
SELECT LEAST('apple', 'banana', 'cherry');
このクエリは、'apple'、'banana'、'cherry' の中で最小値である **'apple'` を返します。
例4:型変換の例
SELECT LEAST(1, 3.14, '5');
このクエリは、1、3.14、'5' の中で最小値である 1 を返します。 文字列 '5' は整数に変換されて比較されます。
例5:NULLの例
SELECT LEAST(NULL, 2, 3);
このクエリは、NULL、2、3 の中で最小値である NULL を返します。
例1:顧客情報のうち、年齢が最も若い顧客のIDを取得する
SELECT customer_id
FROM customers
WHERE age = LEAST(age);
このクエリは、customers
テーブルから、age 列の値が最小である顧客の customer_id
を取得します。
例2:在庫数が最も少ない商品の商品IDと在庫数を取得する
SELECT product_id, stock_quantity
FROM products
WHERE stock_quantity = LEAST(stock_quantity);
このクエリは、products
テーブルから、stock_quantity 列の値が最小である商品の product_id
と stock_quantity
を取得します。
例3:注文金額が100ドル未満の場合は送料を無料にする
SELECT order_id,
CASE WHEN order_amount < 100 THEN 0 ELSE shipping_fee END AS shipping_fee
FROM orders;
このクエリは、orders
テーブルから、order_amount
列の値が100ドル未満の場合は送料を0、それ以外の場合は shipping_fee
列の値を shipping_fee
として返します。
MIN関数
MIN関数は、SELECT句で指定された列の中で最小値を取得します。LEAST関数と同様に、引数として複数の値を指定することもできます。
構文
MIN(column_name)
例
SELECT MIN(age)
FROM customers;
このクエリは、customers
テーブルの age
列の中で最小値を取得します。
LEAST関数との違い
- MIN関数は、NULL値を無視して最小値を計算します。LEAST関数は、NULL値を考慮して最小値を計算します。
- MIN関数は、SELECT句で指定された列の値のみを比較対象とすることができます。LEAST関数は、列だけでなく、リテラル値や式なども比較対象とすることができます。
例
-- MIN関数はNULL値を無視する
SELECT MIN(age)
FROM customers;
+----+
| MIN(age) |
+----+
| 20 |
+----+
-- LEAST関数はNULL値を考慮する
SELECT LEAST(age)
FROM customers;
+----+
| LEAST(age) |
+----+
| NULL |
+----+
CASE式
CASE式は、条件に応じて異なる値を返すことができます。LEAST関数と同様に、複数の値を比較して最小値を取得することができます。
構文
CASE
WHEN condition1 THEN value1
WHEN condition2 THEN value2
...
ELSE valueN
END
例
SELECT
customer_id,
CASE WHEN age = LEAST(age) THEN 0 ELSE shipping_fee END AS shipping_fee
FROM orders;
このクエリは、orders
テーブルから、age
列の値が最小である顧客の customer_id
と、それ以外の顧客の shipping_fee
を取得します。
LEAST関数との違い
- CASE式は、LEAST関数よりも可読性が低くなります。
- CASE式は、LEAST関数よりも柔軟に条件を設定することができます。
サブクエリは、別のクエリの結果をSELECT句で利用することができます。LEAST関数と同様に、複数の値の中で最小値を取得することができます。
構文
SELECT column_name
FROM table_name
WHERE column_name IN (
SELECT MIN(column_name)
FROM table_name
);
例
SELECT customer_id
FROM customers
WHERE age IN (
SELECT MIN(age)
FROM customers
);
このクエリは、customers
テーブルから、age
列の値が最小である顧客の customer_id
を取得します。
- サブクエリは、LEAST関数よりもパフォーマンスが低下する可能性があります。
- サブクエリは、LEAST関数よりも複雑な処理を行うことができます。