(해당 포스트는 Inflearn - [백문이불여일타] 데이터 분석을 위한 중급 SQL 강의록입니다.)
select case
when '컬럼명' = '특정값1' then '내가 지정하여 보고 싶은 값1'
when '컬럼명' = '특정값2' then '내가 지정하여 보고 싶은 값2'
else '기타'
end as '여기까지가 하나의 이름이 되면 너무 정신사나우니 지정할 alias명'
from '테이블명';
AND
를 이용.ex.
select case
when categoryid=1 then '음료'
when categoryid=2 then '조미료'
else '이외'
end as categoryName
from Products
아래와 같은 결과 값이 나오게 된다.
select case
when categoryid=1 then '음료'
when categoryid=2 then '소스'
else '이외'
end as new_category, AVG('price')
from Products
group by new_category
케이스문으로 새롭게 만든 컬럼을 기준으로 group by를 적용하여,
그들 가격의 평균값을 보는 쿼리.
아래와 같은 결과 값이 출력된다.
주어진 테이블에서 A, B, C를 각각 한 변으로 하는 삼각형이 어떤 타입인지를 출력하는 문제이다.
두 변의 값이 같을 경우 'Isosceles' (이등변 삼각형)
세 변의 값이 같을 경우 'Equilateral' (정삼각형)
세 변의 값이 모두 다를 경우 'Scalene'
두 변의 합이 한 변보다 작을 경우 'Not A Triangle'
을 반환하면 된다.
예를 들자면 아래와 같다.
실제 쿼리는 아래와 같다.
주입식 교육은 남부럽지 않을만큼 넉넉히 받은 터라
삼각형의 구성 조건과 타입이 지금까지도 기억나기에 자신이 있었던 문제인데, 이상하게 통과가 되지 않았다.
두 번 세 번 봐도, 내가 쓴 쿼리가 맞는데 왜 통과가 안되는지 이상했다.
해설 강의에서 답을 찾았다.
답은 when절 작성 순서에 있었다.
select case
when A = B and B = C then 'Equilateral'
when A + B <= C or A + C <= B or B + C <= A then 'Not A Triangle'
when A = B or B = C or A = C then 'Isosceles'
# 🌝 주의: 이 when절이 위의 not a triangle 절보다 선행해서는 안된다.
# 순서가 바뀔 경우, A=20, B=20, C=40 처럼 삼각형이 될 수 없는 경우에도 이등변 삼각형으로 나오게 된다!
else 'Scalene'
end as Output
from TRIANGLES;
lesson of the day
case문에서는 when절 작성 순서에 각별한 신경을 쓰자.