SQLite | SQLite関数 | 指定した値と同じ場合にNULLを返す(nullif関数)

nullif関数は2つの引数を比較し、同じ場合はNULLを、異なる場合は第1引数の値を返します。ここでは、nullif関数の使い方について説明します。

nullif関数の使い方

nullif関数は2つの値を比較し、同じ場合はNULLを、異なる場合は第1の値を返します。構文は次のとおりです。

nullif(値1, 値2)

第1引数が第2引数と等しい場合にNULLへ置き換えたいときに使用します。たとえば、第2引数に0を指定すると、値が0の場合にNULLへ置き換えられます。

実際に試してみましょう。まず、次のテーブルを作成します。

create table score (name text, point integer);
sqlite> create table score (name text, point integer);
sqlite>

INSERT文を使用して次のデータを追加します。

insert into score values ('devkuma', 84);
insert into score values ('kimkc', 73);
insert into score values ('araikuma', -1);
insert into score values ('happykuma', 91);
sqlite> insert into score values ('devkuma', 84);
sqlite> insert into score values ('kimkc', 73);
sqlite> insert into score values ('araikuma', -1);
sqlite> insert into score values ('happykuma', 91);
sqlite>

avg関数でpoint列の平均を求めます。すべての値を対象にすると、平均は(84 + 73 - 1 + 91) ÷ 4 = 61.75です。

select avg(point) from score;
sqlite> .mode column
sqlite> .header on
sqlite>
sqlite> select avg(point) from score;
avg(point)
----------
61.75
sqlite>

-1を除外するには、nullif関数で-1NULLに変換してから平均を求めます。avg関数はNULLを除外して計算するため、結果は(84 + 73 + 91) ÷ 3 = 82.66です。

select avg(nullif(point, -1)) from score;
sqlite> select avg(nullif(point, -1)) from score;
avg(nullif(point, -1))
----------------------
82.6666666666667
sqlite>

特定の値をNULLに置き換えたい場合にnullif関数を使用します。