[프로그래머스 SQL] Lv.2 중성화 여부 파악하기 / MySQL (String, Date)
🔔 문제
링크 및 출처 : https://programmers.co.kr/learn/courses/30/lessons/59409
문제 설명
ANIMAL_INS
테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS
테이블 구조는 다음과 같으며, ANIMAL_ID
, ANIMAL_TYPE
, DATETIME
, INTAKE_CONDITION
, NAME
, SEX_UPON_INTAKE
는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
NAME | TYPE | NULLABLE |
---|---|---|
ANIMAL_ID | VARCHAR(N) | FALSE |
ANIMAL_TYPE | VARCHAR(N) | FALSE |
DATETIME | DATETIME | FALSE |
INTAKE_CONDITION | VARCHAR(N) | FALSE |
NAME | VARCHAR(N) | TRUE |
SEX_UPON_INTAKE | VARCHAR(N) | FALSE |
보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 SEX_UPON_INTAKE
컬럼에 ‘Neutered’ 또는 ‘Spayed’라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 ‘O’, 아니라면 ‘X’라고 표시해주세요.
예시
예를 들어 ANIMAL_INS
테이블이 다음과 같다면
ANIMAL_ID | ANIMAL_TYPE | DATETIME | INTAKE_CONDITION | NAME | SEX_UPON_INTAKE |
---|---|---|---|---|---|
A355753 | Dog | 2015-09-10 13:14:00 | Normal | Elijah | Neutered Male |
A373219 | Cat | 2014-07-29 11:43:00 | Normal | Ella | Spayed Female |
A382192 | Dog | 2015-03-13 13:14:00 | Normal | Maxwell 2 | Intact Male |
- 중성화한 동물: Elijah, Ella
- 중성화하지 않은 동물: Maxwell 2
따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.
ANIMAL_ID | NAME | 중성화 |
---|---|---|
A355753 | Elijah | O |
A373219 | Ella | O |
A382192 | Maxwell 2 | X |
※ 컬럼 이름은 일치하지 않아도 됩니다.
본 문제는 Kaggle의 "Austin Animal Center Shelter Intakes and Outcomes"에서 제공하는 데이터를 사용하였으며 ODbL의 적용을 받습니다.
🔍 핵심 포인트
1. CASE 문법 사용 하기
출처 : https://info-lab.tistory.com/305 [:: IT School ::]
🔊 덕분에 정리하고 익히는데 도움되었습니다~ 감사합니다.😊
MySQL을 사용하다 보면 Query(쿼리) 구문에서 Switch(스위치) 문 혹은 IF문과 같이 조건문을 사용하여 결과값을 내야 하는 경우가 있다.
물론 이런 거 없이 Query 하여 나온 결과를 가져와 Code(코드)상에서 처리할 수도 있으나 그것보다는 Query로 나온 결과값을 바로 사용하는 편이 훨씬 간결하고 가독성도 좋다.(물론 이해하기에도 더 쉽다)
MySQL에서는 CASE라는 Function(함수)을 제공하고 있으며, 해당 Function은 “MySQL 4.0 이상”부터 사용이 가능하다.
CASE 문은 조건을 통과하고 첫 번째 조건이 충족되면 값을 반환한다.
조건에 따라 True(참)이면 읽기를 중지하고 결과를 반환하고, 조건이 True(참)가 아니면 ELSE 절의 값을 반환한다.
ELSE 부분이 없고 조건이 참이 아니면 NULL을 반환한다.
(1) CASE문 사용 방법
- WHEN - THEN은 항상 같이 사용 되어야 한다.
- WHEN - THEN은 여러개 사용이 가능하다.
- ELSE가 존재하면 모든 WHEN - THEN 조건이 참이 아닌 경우 ELSE의 결과값을 반환한다.
- ELSE가 없고, 조건이 참이 아니면 NULL을 반환한다.
-- CASE문 사용 방법
CASE
WHEN 조건1 THEN 결과값1
WHEN 조건2 THEN 결과값2
...
WHEN 조건N THEN 결과값N
ELSE 결과값
END
🔐 해결 (쿼리문)
위 핵심포인트 내용을 바탕으로 문제를 푼 쿼리문 되시겠다.
SELECT ANIMAL_ID,
NAME,
CASE WHEN SEX_UPON_INTAKE LIKE '%Neutered%'
OR SEX_UPON_INTAKE LIKE '%Spayed%'
THEN 'O'
ELSE 'X'
END
FROM ANIMAL_INS;
Leave a comment