nullif関数

広告

nullif関数は2つの値を比較し、同じであればNULLを返し異なっていれば最初の値を返します。書式は次の通りです。

nullif(値1, 値2)

2つの値が同じであればNULLを返しますので、NULLではない値をNULLと見なしたい場合などに使用します。

具体的には次のように使用します。

select avg(point) from pointtable;
select avg(nullif(point, 0)) from pointtable;

最初のSELECT文では「point」カラムの値の平均値を取得します。avg関数はNULLでない値の平均を取ります。2番目のSELECT文でも「point」カラムの値の平均を取得しますが、カラムの値が0だった場合はnullif関数の2番目の値と等しいためnullif関数がNULLを返します。結果的に2番目のSELECT文では「point」カラムの値がNULLと0でない値の平均を取得します。

サンプル

では実際に試してみます。

次のようなテーブルを対象とします。

p25-1

このテーブルの「point」カラムの値を対象とした平均を取得します。

p25-2

カラムに格納されている値がNULLの行は除外されますので、(85 + 74 + 0 + 69) / 4 = 57となります。

ではカラムの値が0のものについても除外するようにしてみます。

select avg(nullif(point, 0)) from pointtable;

p25-3

nullif関数によって「point」カラムの値を0と比較し、同じだった場合はNULLを返します。結果的にカラムに格納されている値が0だった場合はNULLとして扱われるため平均を計算を対象から外されます。よって(85 + 74 + 69) / 3 = 76となります。

( Written by Tatsuo Ikura )