https://programmers.co.kr/learn/courses/30/lessons/59045
코딩테스트 연습 - 보호소에서 중성화한 동물
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디
programmers.co.kr
Oracle
-- 코드를 입력하세요
SELECT ANIMAL_ID, ANIMAL_TYPE, NAME
FROM ANIMAL_INS
WHERE (ANIMAL_ID, 'X', 'O') IN
(SELECT ins.ANIMAL_ID,
CASE WHEN ins.SEX_UPON_INTAKE LIKE 'Neutered%' THEN 'O'
WHEN ins.SEX_UPON_INTAKE LIKE 'Spayed%' THEN 'O'
ELSE 'X'
END "ins_check",
CASE WHEN outs.SEX_UPON_OUTCOME LIKE 'Neutered%' THEN 'O'
WHEN outs.SEX_UPON_OUTCOME LIKE 'Spayed%' THEN 'O'
ELSE 'X'
END "outs_check"
FROM ANIMAL_INS ins, ANIMAL_OUTS outs
WHERE ins.ANIMAL_ID = outs.ANIMAL_ID
)
-- SELECT ins.ANIMAL_ID,
-- CASE WHEN ins.SEX_UPON_INTAKE LIKE 'Neutered%' THEN 'O'
-- WHEN ins.SEX_UPON_INTAKE LIKE 'Spayed%' THEN 'O'
-- ELSE 'X'
-- END "ins_check",
-- CASE WHEN outs.SEX_UPON_OUTCOME LIKE 'Neutered%' THEN 'O'
-- WHEN outs.SEX_UPON_OUTCOME LIKE 'Spayed%' THEN 'O'
-- ELSE 'X'
-- END "outs_check"
-- FROM ANIMAL_INS ins, ANIMAL_OUTS outs
-- WHERE ins.ANIMAL_ID = outs.ANIMAL_ID
먼저 주석 처리한 다중 컬럼 IN을 위한 서브 쿼리를 살펴 보면,
1. 동물을 구분하기 위해 Primary key인 ANIMAL_ID를 사용
2. LIKE 문을 이용해 Neutered 혹은 Spayed로 시작하면 'O', 그렇지 않으면 'X'를 반환
3. INS 테이블과 OUTS를 각각 구해야 하므로 JOIN
그리고 바깥 쿼리를 살펴 보면,
1. ANIMAL_ID, ANIMAL_TYPE, NAME을 출력한다.
2. 다중 컬럼 IN을 이용하여 ANIMAL_ID(식별자 역할), 'X', 'O'를 서브쿼리와 비교하여 있으면 출력한다.
반응형
'방법 > 알고리즘&코딩 테스트' 카테고리의 다른 글
[Programmers] 입양 시각 구하기(2) Oracle (0) | 2020.07.24 |
---|---|
[Programmers] 오랜 기간 보호한 동물(1) MySQL, Oracle (0) | 2020.07.21 |
[Programmers] 오랜 기간 보호한 동물(2) MySQL, Oracle (0) | 2020.07.21 |