내가 보려고 정리하는 SQL - (7) CASE WHEN 표현식


CASE WHEN 표현식 예시를 담아보았습니다.🧐

  • 기본 사용법
    • 비교 연산자(>, <, =, <>), NULL 연산자(IS NULL, IS NOT NULL)을 사용하여 조건을 부여할 수 있음
    • 논리 연산자(AND, OR)를 사용하여 여러 개의 조건을 부여할 수 있음
    • ELSE 부분은 생략이 가능하며 생략할 경우 조건에 맞지 않으면 NULL을 반환함
      SELECT	 *
        ,CASE WHEN '조건' THEN '조건에 만족할 때 출력할 데이터' ELSE '조건에 만족하지 않을 때 출력할 데이터' END
      FROM 테이블
      

      image


CASE WHEN 많이 쓰는 이유?

  • 프로그래밍 언어에서 IF 문과 비슷하며, 조건에 따라 서로 다른 값을 추출하여 칼럼을 만들 수 있음
  • WHEN & THEN은 여러개를 입력할 수 있어서 다중으로 조건을 설정할 수 있음
  • NARROW TYPE → WIDE TYPE 펼치기


예제 1-1) 조건을 여러개 부여

  • PRD_NUM1 새 칼럼 조건 : 제품명이 P001이면 제품1로, P002면 제품2로 바꾸고 나머지는 NULL로 반환함
    SELECT	 *
          ,CASE WHEN PRD_NUM = 'P001' THEN '제품1'
                WHEN PRD_NUM = 'P002' THEN '제품2'
       		  ELSE NULL
          END AS PRD_NUM1
    FROM PRODUCT_SALES
    

    (조회결과) image


예제 1-2) 조건을 여러개 부여 - 조건 하나만 적용

  • PRD_NUM1 새 칼럼 조건 : 제품명이 P001이면 제품1로, P002면 제품2로 바꾸고 나머지는 NULL로 반환함
    SELECT	 *
          ,CASE PRD_NUM WHEN 'P001' THEN '제품1'
               		  WHEN 'P002' THEN '제품2'
       		  		  ELSE NULL
           END AS PRD_NUM1
    FROM PRODUCT_SALES
    

    (조회결과) image


예제2) 조건을 여러개 부여 - 순서 조건

  • PAY_PRC_TYPE 새 칼럼 조건 : 제품명이 P001일때 지불금이 15,000원이 이상이면 ‘15000’ & 13,000원 이상 15,000원 미만이면 ‘13000’ & 11,000원 이상 13,000원 미만이면 ‘11000’
  • CASE WHEN은 순서 조건이 있어서 첫번째 순서부터 차례대로 값이 매칭되면 그 뒤 순서에 대한 매칭은 수행되지 않음
    SELECT	 *
          ,CASE WHEN PRD_NUM = 'P001' AND PAY_PRC >= 15000 THEN '15000'
             	  WHEN PRD_NUM = 'P001' AND PAY_PRC >= 13000 THEN '13000'
                WHEN PRD_NUM = 'P001' AND PAY_PRC >= 11000 THEN '11000'
       		  ELSE NULL
          END AS PAY_PRC_TYPE
    FROM PRODUCT_SALES
    

    (조회결과) image


예제3) WHERE 절에 사용

  • WHERE 절에도 CASE 표현식을 사용할 수 있으며, 단순 필터링 용도로만 사용됨
    SELECT	 *
    FROM PRODUCT_SALES
    WHERE PRD_NUM = 'P001'
          AND (CASE WHEN PRD_PRC >= 13000 THEN '13000'
               	  WHEN PRD_PRC >= 12000 THEN '12000'
                    WHEN PRD_PRC >= 11000 THEN '11000'
               END) = '12000'
    

    (조회결과) image


예제4) CASE문 중첩 사용

  • CASE 표현식은 중첩해서 사용할 수 있으며, 중첩해서 사용할 경우 쿼리문의 가독성이 떨어질 수 있으므로 주의해서 사용해야함
  • PRD_PRC_TYPE 새 칼럼 조건 : 제품명이 P001일 때 금액에 따라 HIGH / MIDIUM / LOW로 등급이 매겨지고, P002일 때도 금액에 따라 HIGH / MIDIUM / LOW로 등급을 매김
    SELECT	 PRD_NUM, PRD_PRC
          ,CASE PRD_NUM
              WHEN 'P001' THEN
                  CASE WHEN PRD_PRC >= 13000 THEN 'HIGH'
                       WHEN PRD_PRC >= 12000 THEN 'MIDIUM'
                       WHEN PRD_PRC >= 11000 THEN 'LOW'
                  END
           	WHEN 'P002' THEN
           		CASE WHEN PRD_PRC >= 20000 THEN 'HIGH'
           			 WHEN PRD_PRC >= 19000 THEN 'MIDIUM'
           			 WHEN PRD_PRC >= 18000 THEN 'LOW'
           		END
     		 END AS PRD_PRC_TYPE
    FROM PRODUCT_SALES
    

    (조회결과) image






© 2020.02. by ysjang0926

Powered by theorydb