データベースには、数値型、文字列型、日付型、論理値型など様々なデータ型がありますが、どんな種類のデータも NULL という値を取ることができます。
ただし、NULLはかなり厄介な存在で、NULLと文字列を結合するとNULLになり、NULLと数値の四則演算はNULLとなります。
つまり、NULLをそのままにして、計算を行うことはできません。
テストデータテーブルの作成
DROP TABLE IF EXISTS purchase_log_with_coupon;
CREATE TABLE purchase_log_with_coupon (purchase_id int, price int, coupon int);
INSERT INTO
purchase_log_with_coupon (purchase_id, price, coupon)
VALUES
(10001, 3600, NULL),
(10002, 4280, 500),
(10003, 3380, NULL);
COALESCE関数を使ってNULLを0に置き換える
SELECT
purchase_id,
price,
coupon,
price - coupon AS discount_price1,
price - COALESCE(coupon, 0) AS discount_price2
FROM
purchase_log_with_coupon;
price - coupon AS discount_price1
とすると、null値との四則演算の結果discount_price1
はnull
になってしまうが、COALESCE関数
を使うとcoupon
がnull
の場合0に置き換えられるため、discount_price2
ではcoupn
がnull
であっても計算ができて、discount_price2
がちゃんと計算できる。
purchase_id | price | coupon | discount_price1 | discount_price2 -------------+-------+--------+-----------------+----------------- 10001 | 3600 | | | 3600 10002 | 4280 | 500 | 3780 | 3780 10003 | 3380 | | | 3380 (3 rows)
コメント