실무 오류 사건
저는 실무에서 Postgresql을 사용 중입니다.
업주 중에 Null 값을 반환하는 경우가 발생하여, COALESCE 변환해주는 함수를 사용하여 해결했습니다.
Null 값이 반환되면 NullPointerException 또는 데이터 연산 결과가 무조건 Null로 반환되는 경우가 생기기 때문에 신경 써야 한다고 합니다.
데이터 확인을 위한 예시 데이터
우선, 예시 데이터를 위해 TABLE을 생성해줍니다.
CREATE TABLE tb_accounts (
name varchar(10),
account_num varchar(100),
balance_amt numeric,
trans_amt numeric
);
name : 사용자 명
account_num : 계좌번호
balance_amt : 현재잔액
trans_amt : 거래금액
데이터를 해당 TABLE에 생성해줍니다.
INSERT INTO tb_accounts
VALUES
('홍길동', '102421', 200, NULL),
('이순신', '808853', 500, 300),
('이몽룡', '363652', 100, NULL);
생성된 데이터를 확인해줍니다.
SELECT * FROM tb_accounts;
현재 잔액에서 거래금액을 뺀 거래 후 잔액을 출력하려고 합니다.
간단하게 바라본다면, 200-null은 200이 반환되어야 할 것 같지만! null 이 출력되고 있습니다
이렇게 null 값으로 연산을 한다면, null 값이 반환됨을 확인할 수 있습니다.
이런 경우, COALESCE 함수를 사용하여 null 데이터를 변환하여 위 상황을 방지할 수 있습니다.
COALESCE
SELECT COALESCE (컬럼1, 컬럼2, ..., 컬럼N) FROM 테이블
COALESCE 함수는 Null 이 아닌 컬럼 값이 존재하면, 해당 값을 반환합니다.
위 상황을 COALESCE 함수를 사용하여, 해결하는 쿼리로 변경해보겠습니다.
SELECT
name,
account_num,
balance_amt as 현재잔액,
trans_amt as 거래금액,
balance_amt - COALESCE(trans_amt, 0) as 거래후잔액
from tb_accounts;
거래금액이 Null인 경우에는 0으로 데이터를 변환하여 계산한 결과, 거래 후 잔액이 숫자로 잘 처리된 것을 확인할 수 있습니다.
-참조-
'Coding > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] Timestamp 시간 쿼리 다루기 (0) | 2022.06.24 |
---|