[Mysql] Case

ifyouseeksoomi·2020년 11월 28일
0

Mysql

목록 보기
2/13
post-thumbnail

(해당 포스트는 Inflearn - [백문이불여일타] 데이터 분석을 위한 중급 SQL 강의록입니다.)

CASE

기본

select case
	    when '컬럼명' = '특정값1' then '내가 지정하여 보고 싶은 값1'
            when '컬럼명' = '특정값2' then '내가 지정하여 보고 싶은 값2'
            else '기타'
       end as '여기까지가 하나의 이름이 되면 너무 정신사나우니 지정할 alias명'
from '테이블명';
  • when 조건절에서 다중 조건을 걸고 싶다면 AND를 이용.
  • case문으로 만든 새로운 컬럼은 result에서 맨 앞에 위치하게 된다.

ex.

select case 
            when categoryid=1 then '음료'
            when categoryid=2 then '조미료'
            else '이외'
       end as categoryName
from Products

아래와 같은 결과 값이 나오게 된다.

응용 (Group By 사용하기)

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를 적용하여,
그들 가격의 평균값을 보는 쿼리.
아래와 같은 결과 값이 출력된다.

CASE 문제 풀이

실제 문제 링크


주어진 테이블에서 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절 작성 순서에 각별한 신경을 쓰자.

profile
묻고 더블로 가는 중인 백엔드 개발자입니다.

0개의 댓글