MySQL greatestのnull対応

MySQLには、引数のうち最も大きい値を返してくれるという便利な関数がある。
便利ではあるが、nullが含まれていた場合、nullが返されるというクソ仕様となっている。

select
    greatest(20, 10, 5, 30)
;

30が返ってくる。
しかし、↓の場合は

select
    greatest(20, null, 5, 30)
;

nullが返ってきてしまう。。。
なので、nullを比較対象外にするために、nullの場合は最小値となるようにしておけば良い。

select
    greatest(ifnull(20, 0), ifnull(null, 0), ifnull(5, 0), ifnull(30, 0))
;

greatestは最大値を返してくれるが、逆に最小値を返してくれるleastという関数も存在する。
そのleastもnullが存在すると、nullを返してくる。

なので、同じように、nullの場合は最大値となるようにしておけば良い。

select
    least(ifnull(20, 100), ifnull(null, 100), ifnull(5, 100), ifnull(30, 100))
;

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です