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개 이상의 케이스를 동시에 볼 수도 있다.