[TIL] CASE 작성 시 WHEN 전에 컬럼 묶어주기

tolerance·2020년 8월 23일
2

MySQL

목록 보기
4/8
post-thumbnail

프로그래머스 코딩테스트 중성화 여부 파악하기 문제에서 CASE문을 작성했는데, 문득 궁금한 점이 생겼다.

SELECT animal_id, name, CASE 
                            WHEN sex_upon_intake LIKE '%Neutered%' THEN 'O'
                            WHEN sex_upon_intake LIKE '%Spayed%' THEN 'O'
                            ELSE 'X'
                        END AS 중성화
FROM animal_ins
ORDER BY animal_id

위와 같은 경우에 ELSE는 어떻게 'sex_upon_intake'라는 컬럼에 속한 걸 의미한다는 것을 알지? 단순히 앞의 두 개가 해당 컬럼이라서?

질문해본 결과, 아래처럼 우선 처음에 해당 컬럼을 묶어두고 CASE 조건을 걸 수 있는 듯 했다. 근데 LIKE 로 묶이니 오류가 났다.

(오류난 쿼리1)

SELECT animal_id, name, CASE sex_upon_intake
                             WHEN LIKE 'Neutered%' THEN 'O'
                             WHEN LIKE 'Spayed%' THEN 'O'
                             ELSE 'X'
                        END AS 중성화
FROM animal_ins
ORDER BY animal_id

(오류난 쿼리2)

SELECT animal_id, name, CASE sex_upon_intake LIKE
                             WHEN '%Neutered%' THEN 'O'
                             WHEN '%Spayed%' THEN 'O'
                             ELSE 'X'
                        END AS 중성화
FROM animal_ins
ORDER BY animal_id

그래서 제한적으로 A = B 이렇게 정확히 동일한 것에는 적용되는 것을 확인했다. 아래와 같다.

(작동하는 쿼리, 문제의 답과는 관계없다.)

SELECT animal_id, name, CASE sex_upon_intake
                             WHEN 'Neutered Female' THEN 'O'
                             WHEN 'Spayed Female' THEN 'O'
                             ELSE 'X'
                        END AS 중성화
FROM animal_ins
ORDER BY animal_id

컬럼을 처음에 묶지 않는 경우에 WHEN 구문이 있을 때마다(줄바꿈 때마다) 다른 컬럼을 적는 것도 가능하다고 했는데, 다음 기회에 더 파악해봐야겠다.

profile
매일. 나. 배운다. 조금씩

0개의 댓글