CASE 조건

Daeun Kim·2022년 11월 12일
0

SQL

목록 보기
16/31

1.CASE
특정 조건이 충족됐을때 실행하는 구문
일반 CASE 구문과 CASE 표현으로 나뉨

일반 CASE 구문

CASE
WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
ELSE 결과3 (조건1,2를 모두 만족하지 않는 경우 결과 3을 실행)

SELECT a,
CASE 
WHEN a =1 THEN 'one'
WHEN a =2 THEN 'two'
ELSE 'other' 
END AS label
FROM test

SELECT customer_id, 
CASE 
	WHEN (customer_id <= 100) THEN 'Premium'
	WHEN (customer_id BETWEEN 100 and 200) THEN 'Plus'
	ELSE 'Normal'
END AS class
FROM customer

AS를 END 뒤에 붙이면 추가되는 열 (case)의 이름이 label로 바뀜
조건값 사이에는 쉼표를 붙일 필요가 없다.

CASE 표현 구문

CASE 표현
WHEN 값1 THEN 결과1
WHEN 값2 THEN 결과 2
ELSE 결과3 
END

SELECT a,
CASE a WHEN 1 THEN 'one'
WHEN 2 THEN 'two
ELSE 'other' AS label
END
FROM test

SELECT customer_id, 
CASE customer_id
	WHEN 2 THEN 'Winner'
	WHEN 5 THEN 'Second Place'
	ELSE 'Normal'
END AS raffle_results
FROM customer

무조건 조건이 값이 동일한것으로 잡혀있으므로 굳이 조건을 상세히 입력하지 않아도 되므로 편하다.
대신, 일반 CASE 구문이 보다 다양한 조건을 걸 수 있다.

SELECT 
CASE customer_id
	WHEN 2 THEN 'Winner'
	WHEN 5 THEN 'Second Place'
	ELSE 'Normal'
END AS raffle_results,
COUNT(customer_id)
FROM customer
GROUP BY 
CASE customer_id
	WHEN 2 THEN 'Winner'
	WHEN 5 THEN 'Second Place'
	ELSE 'Normal'
END

CASE값 열을 추가한 후 그 열값에 따라 GROUP BY 하고, 각 CASE 값의 수를 세려면 위와 같이 코드를 입력하면 된다.
CASE~END 까지를 열 이름처럼 인식하는 듯 하다.

SELECT 
SUM (CASE rental_rate 
	WHEN 0.99 THEN 1
	ELSE 0
END) AS number_of_bargains
FROM film

SELECT 
SUM (CASE rental_rate 
	WHEN 0.99 THEN 1
	ELSE 0
END) AS number_of_bargains,
SUM (CASE rental_rate 
	WHEN 2.99 THEN 1
	ELSE 0
END) AS regular
FROM film

위처럼 case 자체를 집계함수로 계산히거나, 2개 이상의 케이스를 동시에 볼 수도 있다.

profile
공부하는 것들을 적는 블로그.

0개의 댓글