SQL非標準の関数でGREATEST()
, LEAST()
という関数があります。複数の引数を取ってそれらの中の最大値・最小値を返すものです。
ところがこれらの関数に微妙な使いづらさを感じている方も多いことと思います。引数にNULLが含まれていた場合ですね。その場合、結果は必ずNULLになってしまいます(PostgreSQLだけは違いますが)。
NULLが引数列に混じっていても無視してそれ以外の値の中でだけ最大値・最小値を求めたい場合の書き方についてです。
BigQueryなら
-- これだとNULLが混じっていたら結果もNULL
GREATEST(a, b, c, d, e)
-- こうすると、NULLは無視したそれ以外の最大値が出る
(SELECT MAX(x) FROM UNNEST([a, b, c, d, e]) x)
Athenaなら
(SELECT MAX(x) FROM UNNEST(ARRAY[a, b, c, d, e]) t(x))