프로그래머스 코딩테스트 중성화 여부 파악하기 문제에서 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 구문이 있을 때마다(줄바꿈 때마다) 다른 컬럼을 적는 것도 가능하다고 했는데, 다음 기회에 더 파악해봐야겠다.