SQL Serverで最大値を取得する:CASE式、IIF関数、MAX関数とCOALESCE関数の比較
SQL Server で Math.Max のような最大値関数を使う方法
SQL Server に、.NET の Math.Max のように 2 つの値を受け取り、最大値を返す関数がありますか?
回答:
はい、SQL Server には MAX 関数があり、複数の方法で 2 つの値の最大値を取得できます。
方法 1: CASE 式を使用する
CASE 式を使用して、2 つの値を比較し、最大値を返すことができます。
SELECT CASE
WHEN value1 > value2 THEN value1
ELSE value2
END AS max_value;
この例では、value1
と value2
を比較し、大きい方の値を max_value
変数に格納します。
方法 2: IIF 関数を使用する
SELECT IIF(value1 > value2, value1, value2) AS max_value;
この例では、value1
が value2
より大きい場合は value1
を返し、そうでなければ value2
を返します。
方法 3: MAX 関数と COALESCE 関数を組み合わせて使用する
MAX 関数と COALESCE 関数を組み合わせて、NULL 値の可能性がある 2 つの値の最大値を取得することもできます。
SELECT MAX(COALESCE(value1, 0), COALESCE(value2, 0)) AS max_value;
この例では、value1
と value2
が NULL の場合、0 を代わりに使用します。
SQL Server には、Math.Max のような 2 つの値の最大値を取得する関数はありません。しかし、CASE 式、IIF 関数、MAX 関数と COALESCE 関数の組み合わせなど、いくつかの方法で同じ結果を得ることができます。
補足:
- 上記の例では、
value1
とvalue2
は数値型であることを前提としています。 - 文字列型の最大値を取得するには、MAX 関数ではなく、GREATEST 関数を使用する必要があります。
-- サンプルデータ
DECLARE @value1 INT = 10;
DECLARE @value2 INT = 20;
-- 方法 1: CASE 式を使用する
SELECT CASE
WHEN @value1 > @value2 THEN @value1
ELSE @value2
END AS max_value;
-- 方法 2: IIF 関数を使用する
SELECT IIF(@value1 > @value2, @value1, @value2) AS max_value;
-- 方法 3: MAX 関数と COALESCE 関数を組み合わせて使用する
SELECT MAX(COALESCE(@value1, 0), COALESCE(@value2, 0)) AS max_value;
上記のコードを実行すると、すべての場合において 20
が出力されます。
その他のサンプルコード:
- 文字列型の最大値を取得する例
DECLARE @value1 VARCHAR(10) = 'A';
DECLARE @value2 VARCHAR(10) = 'B';
SELECT GREATEST(@value1, @value2) AS max_value;
このコードを実行すると、B
が出力されます。
- NULL 値の可能性がある値の最大値を取得する例
DECLARE @value1 INT = NULL;
DECLARE @value2 INT = 10;
SELECT MAX(COALESCE(@value1, 0), COALESCE(@value2, 0)) AS max_value;
2 つの値の最大値を取得するその他の方法
方法 4: GREATEST 関数を使用する
GREATEST 関数は、複数の値の最大値を取得する関数です。
SELECT GREATEST(value1, value2) AS max_value;
VALUES 式を使用して、2 つの値のリストを作成し、MAX 関数を使用して最大値を取得できます。
SELECT MAX(value)
FROM (VALUES (value1), (value2)) AS t(value);
CTE (Common Table Expressions) を使用して、2 つの値の最大値を取得できます。
WITH t AS (
SELECT value1 AS value
UNION ALL
SELECT value2 AS value
)
SELECT MAX(value)
FROM t;
SQL Server には、2 つの値の最大値を取得するさまざまな方法があります。どの方法を使用するかは、状況によって異なります。
sql sql-server max