본문 바로가기
Big Data/Database

CASE WHEN

by Wikinist 2023. 8. 4.

단순한 형식

CASE
    WHEN 조건1 THEN 결과1
    WHEN 조건2 THEN 결과2
    ELSE 기본결과
END

이 경우, 각 조건문은 "WHEN" 키워드 뒤에 오며, 해당 조건이 참일 때 실행될 결과가 지정됩니다.

1. 단순한 형식 예제

이 예제에서는 학생의 성적을 기준으로 학점을 부여하는 경우를 가정해보겠습니다. 다음과 같은 데이터가 있다고 가정해봅시다.

학생 이름 성적
Alice 85
Bob 70
Carol 95
Dave 60

이 데이터를 기반으로 성적에 따라 학점을 부여하려면 다음과 같이 "CASE WHEN" 문을 사용할 수 있습니다.

SELECT
    학생 이름,
    성적,
    CASE
        WHEN 성적 >= 90 THEN 'A'
        WHEN 성적 >= 80 THEN 'B'
        WHEN 성적 >= 70 THEN 'C'
        WHEN 성적 >= 60 THEN 'D'
        ELSE 'F'
    END AS 학점
FROM 성적표;

이 쿼리는 각 학생의 성적에 따라 학점을 부여하며, 결과는 다음과 같을 것입니다

학생 이름 성적 학점
Alice 85 B
Bob 70 C
Carol 95 A
Dave 60 D

검색 형식

CASE 표현식
    WHEN 값1 THEN 결과1
    WHEN 값2 THEN 결과2
    ELSE 기본결과
END

이 경우, "CASE" 키워드 다음에 평가될 표현식을 먼저 작성하고, 그 결과와 각 값과의 비교를 수행하여 조건을 결정합니다.

이렇게 다양한 조건문의 위치와 형식으로 "CASE WHEN" 문을 사용할 수 있습니다. 이는 SQL 문법에서 일반적으로 사용되는 방법 중 몇 가지 예시일 뿐이며, 더 복잡한 쿼리에서는 더 다양한 조건문의 구성이 가능할 수 있습니다.

검색 형식 예제

이번에는 주어진 숫자에 따라 해당 숫자가 어떤 유형인지 판별하는 예제를 살펴보겠습니다.

SELECT
    숫자,
    CASE 숫자
        WHEN 0 THEN '제로'
        WHEN 1 THEN '일'
        WHEN 2 THEN '이'
        WHEN 3 THEN '삼'
        ELSE '기타'
    END AS 숫자_이름
FROM 숫자_테이블;

이 쿼리는 각 숫자에 대해 해당하는 유형을 판별하여 결과를 출력하며, 결과는 다음과 같을 것입니다

숫자 숫자_이름
0 제로
1
2
3
4 기타

이렇게 "CASE WHEN" 문을 사용하여 조건에 따라 다양한 결과를 생성할 수 있습니다.

단순 -> 검색

SELECT f.title,
	   CASE WHEN (SELECT count(*) 
                  FROM inventory i 
			      WHERE i.film_id = f.film_id) = 0 THEN 'Out Of Stock'
	        WHEN (SELECT count(*) 
                  FROM inventory i 
			      WHERE i.film_id = f.film_id) = 1  THEN 'Scarce'
			WHEN (SELECT count(*) 
                  FROM inventory i 
			      WHERE i.film_id = f.film_id) = 2  THEN 'Scarce'
			WHEN (SELECT count(*) 
                  FROM inventory i 
			      WHERE i.film_id = f.film_id) = 3  THEN 'Available'
			WHEN (SELECT count(*) 
                  FROM inventory i 
			      WHERE i.film_id = f.film_id) = 4  THEN 'Available'
			ELSE 'Common'
	   END film_availability
FROM film f;
SELECT f.title,
	   CASE (SELECT count(*) 
             FROM inventory i 
			 WHERE i.film_id = f.film_id)
			WHEN 0 THEN 'Out Of Stock'
			WHEN 1 THEN 'Scarce'
			WHEN 2 THEN 'Scarce'
			WHEN 3 THEN 'Available'
			WHEN 4 THEN 'Available'
			ELSE 'Common'
	   END film_availability
FROM film f;

해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.

'Big Data > Database' 카테고리의 다른 글

SELECT -> INSERT  (0) 2023.08.15
REGEXP  (0) 2023.08.04
MySQL에 csv 파일 데이터 적재  (0) 2023.08.02
MySQL에서 UnixTime  (0) 2023.07.31
LAG & LEAD 함수  (0) 2023.07.27