본문 바로가기
IT/SQL 기초강좌 (PostgreSQL)

74강 SQL 초석 다지기 : PostgreSQL COALESCE function

by DoitSQL 2023. 1. 17.
728x90

PostgreSQL 기초강의, PostgreSQL 기초강좌

74강 SQL 초석 다지기 : PostgreSQL COALESCE function   

 

SQL 초석 다지기 74강 시작합니다.

 

이번 시간에는

 PostgreSQL COALESCE function

에 대해서 알아보는 시간입니다.

 

발음도 힘든 COALESCE입니다.

오라클의 NVL을 대신합니다.

 

이번 시간에는 첫 번째 NOT NULL 인수를 반환하는 PostgreSQL COALESCE 함수에 대해 알아봅니다. Null 값을 효과적으로 처리하기 위해 SELECT 문에서 이 기능을 적용하는 방법을 배우게 됩니다.


PostgreSQL COALESCE function syntax   

COALESCE 함수의 구문은 다음과 같습니다:

COALESCE (argument_1, argument_2, …); 

 

COALESCE 함수는 무제한 수의 인수를 허용합니다. null이 아닌 첫 번째 인수를 반환합니다. 모든 인수가 null이면 COALESCE 함수는 null을 반환합니다.

COALESCE 함수는 Null이 아닌 첫 번째 인수를 찾을 때까지 왼쪽에서 오른쪽으로 인수를 평가합니다. 첫 번째 null이 아닌 인수의 나머지 인수는 모두 평가되지 않습니다.

COALESCE 함수는 SQL 표준에서 제공하는 NVL 또는 IFNULL 함수와 동일한 기능을 제공합니다. MySQL에는 IFNULL 기능이 있으며 Oracle은 NVL 기능을 제공합니다.

 

다음 예를 참조하십시오:

SELECT
     COALESCE (1, 2);  

결과

SELECT
COALESCE (NULL, 2 , 1); 

결과

 

우리는 종종 데이터를 쿼리 할 때 COLAESCE 함수를 사용하여 null 값을 기본값으로 대체한다. 예를 들어, 블로그 게시물에서 발췌한 내용을 표시하려고 합니다. 발췌한 내용이 제공되지 않은 경우 게시물 내용의 첫 번째 150자를 사용할 수 있습니다. 이를 위해 다음과 같이 COALESCE  기능을 사용할 수 있습니다:

SELECT
     COALESCE (excerpt, LEFT(CONTENT, 150))
FROM
     posts; 


PostgreSQL COALESCE example   

COALESCE 함수를 사용하는 예를 살펴보겠습니다. 먼저 CREATE TABLE 문을 사용하여 다음과 같이 항목 이름이 지정된 테이블을 만듭니다:

CREATE TABLE items (
     ID serial PRIMARY KEY,
     product VARCHAR (100) NOT NULL,
     price NUMERIC NOT NULL,
     discount NUMERIC
);   

 

items 테이블에는 네 가지 필드가 있습니다:

  • id: 항목 테이블에서 항목을 식별하는 기본 키입니다.
  • product: 제품명.
  • price : 제품의 가격.
  • discount : 제품의 할인.

둘째, 다음과 같이 INSERT 문을 사용하여 일부 레코드를 items 테이블에 삽입합니다:

INSERT INTO items (product, price, discount)
VALUES
     ('A', 1000 ,10),
     ('B', 1500 ,20),
     ('C', 800 ,5),
     ('D', 500, NULL); 

 

셋째, 다음 공식을 사용하여 제품의 순 가격을 쿼리 합니다:

net_price = price - discount; 

 

SELECT
     product,
     (price - discount) AS net_price
FROM
     items;   

결과

네 번째 줄을 보면 D 제품의 순 가격이 null이라는 것을 알 수 있을 것이고, 이것은 옳지 않은 것 같습니다. 문제는 제품 D의 할인이 null이라는 것입니다. 따라서 우리가 null 값을 사용하여 순 가격을 계산할 때, PostgreSQL에서 null을 반환합니다.

올바른 가격을 얻으려면 할인이 무효인 경우 0이라고 가정해야 합니다. 그러면 COALESCE 함수를 다음과 같이 사용할 수 있습니다:

SELECT
     product,
     (price - COALESCE(discount,0)) AS net_price
FROM
     items; 

결과

현재 D 제품의 순 가격은 500인데, 우리가 순 가격을 계산할 때 null 값 대신 0을 사용하기 때문입니다.


COALESCE 함수를 사용하는 것 외에도 이 경우 CASE 식을 사용하여 null 값을 처리할 수 있습니다. 위의 동일한 결과를 얻기 위해 CASE 식을 사용하는 다음 쿼리를 참조하십시오.

SELECT
     product,
     (
          price - CASE
          WHEN discount IS NULL THEN
               0
          ELSE
               discount
          END
     ) AS net_price
FROM
     items;   

위의 쿼리에서 할인이 null이면 0을 사용하고 그렇지 않으면 순 가격을 계산하는 식에서 할인 값을 사용합니다. 결과는 위의 쿼리와 같습니다.

 

성능 면에서 COALESCE 함수와 CASE 표현식은 동일합니다. COALESCE 함수는 쿼리를 더 짧고 읽기 쉽게 만들기 때문에 CASE 표현식보다 COALESCE 함수를 선호합니다.


이번 시간에는 COALESCE 함수를 사용하여 쿼리에서 null 값을 대체하는 방법을 배웠습니다.

 

감사합니다.


본 강의는 PostgreSQL Tutorial을 참조합니다.  https://www.postgresqltutorial.com/
Do it! SQL을 찾아 주셔서 감사합니다. 공감 ♥ , 댓글이 큰 힘이 됩니다.

 

728x90

댓글