728x90
반응형

오늘은 오라클 함수 중에 CASE WHEN 함수에 포스팅을 해 보겠어요  

CASE WHEN 구문은 아주 많이 사용되어 집니다.

코드값을 비교하여 변환이 필요할때는 DECODE만 사용해도 충분하지만 여러개의 조건별로 데이터를 가공 해야 하는 경우

CASE WHEN 함수가 아주 유용합니다.

 

* CASE WHEN ~ THEN END 구문 

    CASE WHEN 조건1 THEN 조건만족시 값1
         WHEN 조건2 THEN 조건만족시 값2
         WHEN 조건3 THEN 조건만족시 값3
         ...
         ELSE 0
    END 결과컬럼명
 

 

조건과 조건만족시 결과값의 쌍이 반복되며 모든 조건이 불일치 할때는 ELSE 조건에 지정된 값을 결과로 얻어요.

END 다음에 지정하는 결과컬럼명이 쿼리 결과 출력시 표시되는 컬럼명입니다.

 

 

 

1. 테스트를 위해 WITH문을 사용하여 TDATA 라는 데이터를 만들어서 조회한 결과입니다.   

이 데이터를 이용하여 CASE WHEN 문장을 적용해 보도록 하겠습니다.

 

WITH TDATA AS

( 

SELECT 3 AS 판매량, '미국' 국적, '핸드폰' AS 판매제품 FROM DUAL

UNION ALL        

SELECT 15 AS 판매량, '한국' 국적, '냉장고' AS 판매제품 FROM DUAL 

UNION ALL

SELECT 8 AS 판매량, '대만' 국적, '핸드폰' AS 판매제품 FROM DUAL

UNION ALL

SELECT 5 AS 판매량, '한국' 국적, '자동차' AS 판매제품 FROM DUAL

)

SELECT * FROM TDATA

  

  

 

2. 데이터중에서 고품질인 정보를 읽어보겠어요. 고품질의 조건은 국적이 한국이면 고품질입니다.

고품질여부 필드를 만드는데 국적이 한국이면 고품질, 아니면 공백으로 해서 고품질여부 항목을 만들었어요

SELECT

판매량, 국적, 판매제품

, CASE WHEN 국적 = '한국' THEN '고품질' ELSE '' END 고품질여부

FROM TDATA;

  

 

 

 

3. 3가지의 정보를 구해 봤어요

1) 총판매량 : 판매량의 총 합계

2) 한국_판매량 : 국적이 한국 정보의 판매량 합계를 구합니다.

3) 한국대만_판매량 : 국적이 한국이거나 대만 정보의 판매량 합계를 구합니다.

 SELECT

     SUM(판매량) AS 총판매량

    ,SUM(CASE WHEN 국적 = '한국' THEN 판매량 ELSE 0 END) 한국_판매량

    ,SUM(CASE WHEN 국적 = '한국' OR 국적='대만' THEN 판매량 ELSE 0 END) 한국대만_판매량

 FROM TDATA

  

 

4. 4가지의 정보를 구해 봤어요

1) 총판매량 : 판매량의 총 합계

2) 한국_판매량 : 국적이 한국 정보의 판매량 합계를 구합니다.

3) 미국_판매량 : 국적이 미국 정보의 판매량 합계를 구합니다.

4) 대만_판매량 : 국적이 대만 정보의 판매량 합계를 구합니다.

 SELECT

    SUM(판매량) AS 총판매량

   ,SUM(CASE WHEN 국적 = '한국'THEN 판매량 ELSE 0 END) 한국_판매량

   ,SUM(CASE WHEN 국적 = '미국'THEN 판매량 ELSE 0 END) 미국_판매량

   ,SUM(CASE WHEN 국적 = '대만'THEN 판매량 ELSE 0 END) 대만_판매량

FROM TDATA

  

 

 

4. 판매금액

국적별로 가중치를 줘서 판매금액이라는 항목을 만들었봤어요

한국산이면 개당 10,000, 미국산은 개당 2,000, 대만산은 개당 100 으로 해서

국적, 판매량 값을 가지고 판매금액을 구했어요

SELECT   
     국적,판매량
    ,CASE WHEN 국적 = '한국' THEN  판매량 * 10000
          WHEN 국적 = '미국' THEN  판매량 * 2000
          WHEN 국적 = '대만' THEN  판매량 * 100
          ELSE 판매량 * 10000
     END 판매금액
FROM TDATA

  

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,