💿 Oracle/프로그래머스 Lv. 1

[프로그래머스] 상위 N개 레코드

동일 2023. 6. 16. 16:28

답1 - 서브쿼리 사용

SELECT NAME
FROM (
    SELECT ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE
    FROM ANIMAL_INS
    ORDER BY DATETIME
)
WHERE ROWNUM = 1

1. 동물보호소에 가장 먼저 들어온 동물 조회

서브쿼리를 활용하여 정렬 후 ROWNUM을 사용하여 조회한다.

 

1-1. 서브쿼리를 사용하지 않고 ROWNUM을 사용하면 안되는 이유

ORDER BY로 정렬하는게 핵심인데

ROWNUM이 우선 실행되고 그 다음에 ORDER BY가 사용되기 때문에

ORDER BY를 뺀 결과값에 ROWNUM이 생성된 후 DATETIME으로 정렬한다.

결론적으로 정렬되지 않은 값에 ROWNUM 값이 매겨져서 정확한 값을 알 수 없다.

 

답2 - FETCH 사용

SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
FETCH FIRST 1 ROW ONLY

2. 동물보호소에 가장 먼저 들어온 동물 조회

ORDER BY와 FETCH를 동시에 사용하여 서브쿼리 없이 조회한다.

 

2-1. FETCH 관련

FETCH FIRST 1 ROW

FETCH FIRST 1 ROWS

FETCH NEXT 1 ROW

FETCH NEXT 1 ROWS

다 똑같다.