상세 컨텐츠

본문 제목

프로그래머스 LEVEL3 [오랜 기간 보호한 동물(1)] ORACLE

DataBase/프로그래머스

by Chan.94 2021. 10. 1. 18:43

본문

반응형
 

코딩테스트 연습 - 오랜 기간 보호한 동물(1)

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

 

JOIN 문제안에 있지만 꼭 JOIN으로 결과를 도출하지 않아도된다.
이 글을 검색하는 사람들은 이제 공부를 시작하는 학생이라 생각하기에 성능은 생각하지 않겠다.
결과값을 도출하는데에는 수많은 방법이 있다라는 것을 말해주고싶다.
OUTER JOIN, SUB QUERY, RANK를 이용하여 정답을 도출해보겠다.

SQL 결과(1) - OUTER JOIN

SELECT
    NAME
    ,DATETIME
FROM(
    SELECT AINS.NAME
          ,AINS.DATETIME
    FROM ANIMAL_INS AINS
        ,ANIMAL_OUTS AOUT
    WHERE 1=1
    AND AINS.ANIMAL_ID = AOUT.ANIMAL_ID(+)
    AND AOUT.ANIMAL_ID IS NULL
    ORDER BY AINS.DATETIME
    )
WHERE 1=1
AND ROWNUM < 4

해설(1)

/*
입양 여부를 확인하기 위해서는 테이블을 조인해야한다.
아직 입양을 못 간 동물이 기준이기에 OUT테이블에 (+)
*/
FROM ANIMAL_INS AINS
    ,ANIMAL_OUTS AOUT
WHERE 1=1
AND AINS.ANIMAL_ID = AOUT.ANIMAL_ID(+)
/*입양을 가지 못한 동물*/
AND AOUT.ANIMAL_ID IS NULL
/*가장 오래 보호소에 있었던 동물 3마리*/
AND ROWNUM < 4

SQL 결과(2) - SUB QUERY

SELECT
    NAME
    ,DATETIME
FROM(
    SELECT NAME
          ,DATETIME
    FROM ANIMAL_INS 
    WHERE 1=1
    AND ANIMAL_ID NOT IN (SELECT 
                            ANIMAL_ID
                          FROM ANIMAL_OUTS)
    ORDER BY DATETIME
    )
WHERE 1=1
AND ROWNUM < 4

SQL 결과(3) - RANK

SELECT
    NAME
    ,DATETIME
FROM(
    SELECT AINS.NAME
          ,AINS.DATETIME
          ,DENSE_RANK() OVER(ORDER BY AINS.DATETIME ASC) AS RNK
    FROM ANIMAL_INS AINS
        ,ANIMAL_OUTS AOUT
    WHERE 1=1
    AND AINS.ANIMAL_ID = AOUT.ANIMAL_ID(+)
    AND AOUT.ANIMAL_ID IS NULL
    )
WHERE 1=1
AND RNK < 4
반응형

관련글 더보기

댓글 영역

>