SQL에는 조건에 따라 값을 지정해주는 CASE문이 있습니다.
CASE문의 형식은 아래와 같이 구성됩니다.
CASE 컬럼
WHEN 조건1 THEN 값1
WHEN 조건2 THEN 값2
ELSE 값3
END
컬럼이 조건1을 만족하면 값1을 조건2를 만족하면 값2를 양쪽 다 맞지 않는 경우 값3를 반환합니다.
CASE문은 주로 약어나 코드를 읽기 쉬운 값으로 바꿔줄 때 사용하거나 데이터를 범주화할 때 사용합니다.
ex) 학생들의 점수에 따라 A,B,C로 나눔
저는 오늘 CASE문을 사용한 예제를 풀어보았기에 해당 문제를 예제로 삼아보겠습니다.
pizza_price_cost
라는 테이블은 id, name, price, cost라는 컬럼을 가지고 있습니다.
해당 데이터들을 가지고 원가와 가격 간의 효율 그리고 해당 효율에 따른 등급을 매겨보겠습니다.
- pizza_price_cost 테이블의 name, price, price/cost(원가 기준 가격의 비율) 컬럼을 조회하세요.
- 대신 마지막 price/cost 컬럼을 사용해서 그 값이
1 <= 값 < 1.5 인 경우, ‘C. 저효율 메뉴’ 1.5 <= 값 < 1.7 인 경우, ‘B. 중효율 메뉴’ 1.7 <= 값 인 경우, ‘A. 고효율 메뉴’
라고 그 값을 변환해서 표시하는 추가적인 컬럼도 함께 조회하고 대신 이 컬럼에는 efficiency라는 alias를 붙여주세요.
- 그리고 전체 row를 efficiency 컬럼을 기준으로 내림차순, 그 다음 기준으로 price 컬럼을 기준으로 오름차순 정렬하세요.
- 이 중에서 가장 첫 번째 row 부터 6개만 추리세요.
SELECT
name,
price,
price / cost,
(CASE
WHEN price / cost >= 1 AND price / cost < 1.5 THEN 'C. 저효율 메뉴'
WHEN price / cost >= 1.5 AND price / cost < 1.7 THEN 'B. 중효율 메뉴'
WHEN price / cost >= 1.7 THEN 'A. 고효율 메뉴'
ELSE '그 밖의 메뉴'
END) AS efficiency
FROM pizza_price_cost
ORDER BY efficiency DESC, price ASC
LIMIT 6;
SELECT 뒤에 조회할 컬럼들을 지정해줬습니다.
CASE문을 사용해 효율별로 범위를 지정해 등급에 따른 값을 매겨주었고
END이후 AS를 이용해 efficiency
라는 컬럼명을 지정해줬습니다.
이후 FROM 뒤에 ORDER BY문을 사용해 efficiency컬럼은 내림차순으로 price컬럼은 오름차순으로 정렬
LIMIT문을 사용해 조회하는 row를 6개로 제한했습니다.