새소식

Programmers Coding Test/MySQL

[프로그래머스 59409] MySQL - Level2 중성화 여부 파악하기

  • -

 

중성화 여부 파악하기

 

https://school.programmers.co.kr/learn/courses/30/lessons/59409

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

1)  문제

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. 
ANIMAL_INS 테이블 구조는 다음과 같으며,
ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는
각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 
중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다. 
동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 
이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.

 

 

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
 

 

 

2)  예시

 

예를 들어 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

 

 

 

 

3)  풀이

 

아래 코드에서 1번 코드를 기준으로 설명하겠습니다.

1. 테이블에서 동물의 아이디, 이름, 중성화여부를 조회합니다.

● SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS

 

 

2. 동물 아이디 순으로 조회합니다.

● ORDER BY ANIMAL_ID

 

 

3. 단, 중성화가 되었다면 O, 중성화 되지않았다면 X로 표시합니다.

● CASE WHEN SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%'

THEN 'O' ELSE 'X' END AS 중성화.

 

○ Neutered : 거세된

 Spayed : 난소가 제거된

즉, Neutered 이거나 Spayed인 동물은 중성화된 동물이고, 그 외는 중성화 되지 않은 것입니다.

 

 

 

※ CASE WHEN 조건 THEN 조건에 따른 값

    ELSE 조건에 해당하지 않는 값

    END

조건에 해당하면 THEN 이후 값이 나오고, 조건에 해당하지 않으면 ELSE 이후의 값이 반환됩니다.

그리고 CASE를 종료하기 위해 END로 마무리합니다.

 

AS 중성화로, O 또는 X 값이 들어갈 COLUMN 명을 '중성화'로 설정해줍니다.

 

 

 

 

4)  코드

 

1. 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;

 

 

 

 

2. IF 사용

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;

 

※ IF(조건, 값1, 값2)

IF 조건에 해당하면 값1이 반환되고, 조건에 부합하지 않는다면 값2를 반환합니다.

 

 

 

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.