갭알 ☠️/SQL
[프로그래머스/SQL] 중성화 여부 파악하기 (MySQL, Oracle)
Niyaoh
2022. 8. 12. 16:18
https://school.programmers.co.kr/learn/courses/30/lessons/59409
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
ANIMAL_INS 테이블
NAME | TYPE | NULLABLE | INFO |
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 | VARHCAR(N) | FALSE | 성별 및 중성화 여부 |
[문제] 보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.
▼ 해석 및 풀이
MySQL
/*
[테이블] : ANIMAL_INS
[컬럼명] : ANIMAL_ID, NAME, 열 이름 '중성화'
[조건] : SEX_UPON_INTAKE 컬럼이 '%Neutered%'라면 '중성화' 열에 O 표시를, '%Spayed%'라면 X 표시를 ANIMAL_ID 기준 ASC순으로 조회.
CASE문(WHEN 조건 THEN '반환 값' 여러 개 사용 가능)
CASE WHEN 조건 THEN '반환 값' ELSE '조건에 해당 안 될 경우 반환 값' END
*/
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;
Oracle
/*
DECODE 함수 :
DECODE(컬럼, '조건1', '반환값1', '조건2', '반환값2', 'ELSE 반환값')
*/
SELECT
ANIMAL_ID,
NAME,
DECODE(SEX_UPON_INTAKE, 'Neutered Male', 'O', 'Spayed Female', 'O', 'X') AS "중성화"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC;