[PostgreSQL] NULL でない自身の最初の引数を返す COALESCE 関数が便利

Tadashi Shigeoka ·  Thu, March 8, 2012

PostgreSQL にて、値がNULLの場合は、代わりの値を返す COALESCE 関数という便利なものを教えてもらったのでメモ。

SUM 関数は、指定したカラム(ここでは money)の値が全て NULL の場合、NULLを返します。

返り値が NULL ではなく、0 にしたいので、最初は下記のように書いていました。

SELECT
  CASE WHEN SUM(money) IS NOT NULL THEN SUM(money) ELSE 0 END AS total_money
  FROM user;

このような、SUM関数の結果がNULLの場合は、0 を返して欲しいという書き方は、CASE 文を使わなくても、COALESCE 関数を使えば実現できるみたいです。

6.12.2. COALESCE COALESCE(value [, ...]) COALESCE 関数は、NULL でない自身の最初の引数を返します。 データを表示の目的で取り出す際、NULL 値の代わりにデフォルト値を使う場合、時として便利なことがあります。 その例です。

SELECT COALESCE(description, short_description, ‘(none)’) …

・引用元:条件式 はてなブックマーク - 条件式

なので、COALESCE 関数を使って、下記のように書くことができます。

SELECT
  COALESCE(SUM(money), 0) AS total_money
  FROM user;

以上です。

【参考】

PostgreSQL COALESCEでNULLを空白に変換 - 130単位 はてなブックマーク - PostgreSQL COALESCEでNULLを空白に変換 - 130単位

SQL の COALESCE はてなブックマーク - SQL の COALESCE