본문 바로가기

Oracle

상위 N개 레코드 조회하기

https://programmers.co.kr/learn/courses/30/lessons/59405

 

코딩테스트 연습 - 상위 n개 레코드

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

programmers.co.kr

프로그래머스 상위 N개의 쿼리 조회하기 문제를 풀어보고 실수한 것을 공유합니다.

처음에는 단순하게 상위 N개를 조건문에 주고 ORDER BY를 하게 되면 결과가 나올 줄 알았기 때문에 이런 방식으로 

문제를 풀었습니다.

SELECT NAME FROM ANIMAL_INS
WHERE ROWNUM < 2
ORDER BY DATETIME

그러나 전혀 엉뚱한 결과가 나왔습니다..

먼저 정답 부터 보겠습니다.

SELECT NAME
FROM 
( SELECT * FROM ANIMAL_INS ORDER BY DATETIME)
WHERE ROWNUM < 2

이런 방식으로 조회를 해야 정답을 도출할 수 있습니다.

그 이유는 쿼리의 실행 방식때문입니다.

쿼리가 실행되는 순서는 FROM -> WHERE  -> GROUP BY -> SELECT -> ORDER BY 순으로 실행됩니다.

첫 번째 쿼리의 실행 순서는 FROM ANIAML_INS 후에 WHERE ROWNUM을 실행하게 되겠죠?

즉 ODERER BY 이전에 ROWNUM이 실행되는 문제가 발생하니까 아래와 같은 방식으로 먼저 정렬을 한 레코드를 가져

온 후에 WHERE ROWNUM < 2 이 실행되는 방식으로 쿼리문을 작성해야 합니다.

'Oracle' 카테고리의 다른 글

다른 테이블을 참조하여 UPDATE 하는 방법  (0) 2020.07.11
서브쿼리의 종류와 WITH 쿼리  (0) 2020.06.30
CHAR, VARCHAR, VARCHAR2 차이점  (2) 2020.03.25
PLSQL - 필수 개념 정리  (0) 2020.03.23
PL/SQL - DUAL TABLE  (0) 2020.03.18