NullNull

프로그래머스 SQL 중성화 여부 파악하기 본문

SQL

프로그래머스 SQL 중성화 여부 파악하기

KYBee 2022. 3. 1. 12:46

Data 구조

ANIMAL_INS : 동물 보호소에 들어온 동물의 정보를 담은 테이블

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'라고 표시해줏세요.

 

예시

Input: 

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

Output:

ANIMAL_ID NAME 중성화
A355753 Elijah O
A373219 Ella O
A382192 Maxwell 2 X

 

정답:

기존의 데이터에서 특정 조건을 만족하는 여부에 따라 새로운 컬럼을 하나 생성하고 값을 지정해서 결과로 추출해야 합니다. 해당 문제는 2가지 방법으로 풀 수 있습니다.

1. CASE

2. IF

 

1. CASE

CASE의 문법은 다음과 같습니다.

CASE WHEN (조건) THEN (참일때의 결과) ELSE (거짓일 때의 결과) END

조건의 수는 꼭 하나일 필요는 없습니다.

CASE WHEN (조건 1) THEN (조건 1이 참일 때의 결과) 
WHEN (조건 2) THEN (조건 2가 참일 때의 결과)
ELSE (조건 1과 조건 2가 모두 거짓일 때의 결과) END

우리는 중성화가 된 동물의 SEX_UPON_INTAKE 컬럼에는 Neutered 혹은 Spayed 가 들어간다는 것을 압니다. 따라서 LIKE와 CASE를 적절하게 활용하여 쿼리문을 작성합니다.

SELECT ANIMAL_ID, NAME,
CASE WHEN (SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%') THEN 'O' ELSE 'X' END AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

물론 조건을 하나로 합치지 않고 두개로 분리해도 됩니다.

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

 

2. IF 문의 문법은 다음과 같습니다.

IF(조건, 참일 경우, 거짓일 경우)

따라서 조건 부분에 중성화 여부를 확인하는 질의를 적어주면 됩니다. 위의 CASE문과 크게 다른 점은 없습니다.

SELECT ANIMAL_ID, NAME,
IF(SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%', 'O', 'X') AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
Comments