💿 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
다 똑같다.