https://programmers.co.kr/learn/courses/30/lessons/59409
1. 서론
못 풀겠어서 깜짝 놀람! Case when문을 써서 푸는 문제.
2. 문제 풀이
ANIMAL_INS: 동물 보호소에 들어온 동물의 정보를 담은 테이블
테이블 구조
ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE
(각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부)
Q. 중성화된 동물은 SEX_UPON_INTAKE 칼럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.
즉, sex_upon_intake 칼럼에 'Neutered' 또는 'Spayed'가 들어가 있다면 O 아니면 X라고 표시해야 하는 문제다.
근데 쿼리 짜면서 Case when 쓴 적이 없어서 어떻게 하는지 몰라서 검색하다가 알게 됨.
출처: https://gent.tistory.com/311
ex) CASE WHEN [조건] THEN [리턴 값]
(생략 가능) ELSE
END AS [붙이고 싶은 이름] // 꼭 as는 없어도 됨
CASE문을 사용하면 if문을 사용하는 것과 동일하게 값을 출력할 수 있다!
이걸 사용할 수 있는가가 이 문제의 핵심이다. 이걸 모르면 그냥 못 푸는 거니까 정말 슬프다 ~.~
3. 코드 설명
SELECT animal_id, name,
CASE WHEN sex_upon_intake like 'Intact%' THEN 'X'
ELSE 'O'
END AS 중성화
FROM animal_ins
ORDER BY animal_id;
문제에서는 'Neutered' 또는 'Spayed'가 있는 경우 O이고 아니면 X라고 했는데 문제에 주어진 테이블을 보니까 두 개의 경우가 더 많고 X에 해당하는 'Intact'가 나와있길래 그냥 그것만 X라고 하고 나머지를 O라고 해줬다. 두 줄로 쓰기 싫어서,, ㅎㅎ
솔직히 내가 모르는 값이 또 있어서 틀렸다고 나올 줄 알았는데 이 세 가지 경우 밖에 없나 보다.
'SQL' 카테고리의 다른 글
[ORACLE] 프로그래머스 보호소에서 중성화한 동물 (0) | 2021.05.27 |
---|---|
[ORACLE] 프로그래머스 오랜 기간 보호한 동물(2) (+MySQL) (0) | 2021.05.27 |
[ORACLE] 프로그래머스 이름에 el이 들어가는 동물 찾기 (0) | 2021.05.27 |
[ORACLE] 프로그래머스 루시와 엘라 찾기 (0) | 2021.05.27 |
[SQLD] 과목 1. 데이터 모델링의 이해 2) 데이터 모델과 성능 (0) | 2021.03.18 |