본문 바로가기
Database/MySQL

IF / CASE

by 컴돈AI 2024. 3. 2.

목차

    IF / CASE

    • 조건에 따라서 결과를 다르게 출력해줘야 하는 경우가 있습니다. 이럴 때 사용하는 것이 IF / CASE 입니다.

    IF

    • IF () 는 양자택일밖에 하지 못합니다. 
      • IF (조건색, 참이면뱉을값, 거짓이면뱉을값)
    • 예시
      • 사용금액이 20만원 이상이면 우수고객, 아닐 경우 일반고객 출력하기
        • SELECT 고객명, 사용금액, IF (사용금액>200000, '우수고객', '일반고객') AS 등급 FROM card

    CASE

    • CASE는 여러 개의 조건식을 걸어줄 수 있습니다.
      • CASE
        	WHEN 조건식1 THEN 남길값1
        	WHEN 조건식2 THEN 남길값2
        	WHEN 조건식3 THEN 남길값3
        	ELSE 나머지값
        END
    • 예시
      • 사용금액이 200000이상이면 최우수고객, 100000~200000 사이면 우수고객, 10만원 미만이면 일반고객 출력하기
        • SELECT 고객명,사용금액,
          CASE 
          	WHEN 사용금액>=200000 THEN '최우수고객'
          	WHEN 사용금액>=100000 THEN '우수고객'
          	ELSE '일반고객'
          END AS 등급
          FROM card;
      • 고객등급이 vip 면 3점, 로열이면 2점, 그 외일 경우 1점을 부여할 때, 모든 고객 점수는 몇 점인지 출력하기
        • SELECT sum(
          CASE
          	WHEN 고객등급='vip' THEN 3
          	WHEN 고객등급='로열' THEN 2
          	ELSE 1
          END
          ) AS 총점 FROM card;

    예제

    • card 테이블에서 사용금액 30만원 이상은 50% 증액, 30만원 미만은 10% 증액해서 사용금액의 총합계를 출력해 보기.
      • SELECT SUM(
        IF (사용금액>=300000, 사용금액*1.5, 사용금액*1.1)
        ) AS 총합계
        FROM card;
      • SELECT SUM(
        CASE
        	WHEN 사용금액>=300000 THEN 사용금액*1.5
        	ELSE 사용금액*1.1
        END
        ) AS 총합계
        FROM card;

    • 고객등급을 재설정해보기 사용금액이 30만원 이상은 vip 20만원이상 30만원 미만은 로열 그 외엔 패밀리로 다시 설정해보기(고객등급이 바뀐 이름만 출력하기)
      • SELECT 고객명,사용금액,
        CASE 
        	WHEN 사용금액>=300000 THEN 'vip'
        	WHEN 사용금액>=200000 THEN '로열'
        	ELSE '패밀리'
        END AS 등급
        FROM card
        WHERE 고객등급 !=(CASE 
        	WHEN 사용금액>=300000 THEN 'vip'
        	WHEN 사용금액>=200000 THEN '로열'
        	ELSE '패밀리'
        END)

    출처