본문 바로가기
Tech/Database

PostgreSQL - COALESCE 함수 활용

by Augustine™ 2018. 7. 3.
반응형

쿼리를 만들 때, null 값을 특정 데이터로 가공해서 추출이 필요할 때가 있다. 뿐만 아니라, application layer에서 데이터가 아닌 null 을 리턴할 때, NullPointerException을 초래할 수도 있고, 집계 쿼리를 만들 때도, Null 데이터의 연산은 Null을 반환하므로, 데이터 변환이 필요하다. PostgreSQL에는 Oracle 의 nvl 함수와 같이 COALESCE라는 함수가 있다. 

아래와 같은 데이터가 있다.


CREATE TABLE purchase_log (
    purchase_id varchar(255)
  , amount      integer
  , coupon      integer
);

INSERT INTO purchase_log
VALUES
    ('10001', 3280, NULL)
  , ('10002', 4650,  500)
  , ('10003', 3870, NULL)
;


위 데이터에서 amount 컬럼 값에서 coupon 컬럼의 값을 뺀 할인된 값을 추출하고자 할 때, default 값 변경 없이 연산할 경우, Null 이 된다. 이런 경우 Coalesce함수를 이용해서 Null 을 방지할 수 있다.

 

SELECT
	purchase_id
	, amount
	, coupon
	, amount - coupon AS 할인가격1
	, amount - COALESCE(coupon, 0) AS 할인가격2
FROM purchase_log;


결과는 아래와 같다.

참고로, NULLIF라는 함수도 있다. 다만, 이 함수는 COALESCE함수와 같이 디폴트 값을 직접 반환하지 않는다. 연산을 할 때, 0으로 나누는 것을 피할 수 있다.



반응형

댓글