1. 상위 n개 레코드
A. 문제
위 프로그래머스 사이트에 접속하여 문제를 확인해주세요.
B. 내 답안
-- Oracle
-- SELECT NAME
-- FROM ANIMAL_INS
-- WHERE ROWNUM <= 10
-- ORDER BY DATETIME ASC;
SELECT NAME
FROM
(
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME ASC)
WHERE ROWNUM <= 1;
a. 추가적인 설명
-- Oracle
-- SELECT NAME
-- FROM ANIMAL_INS
-- WHERE ROWNUM <= 10
-- ORDER BY DATETIME ASC;
SELECT NAME
FROM
(
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME ASC)
WHERE ROWNUM <= 1;
상위 n개 데이터만 추출하는 방법으로 LIMIT
을 알고 있었다. 그런데 자꾸 에러가 발생했다. 알고보니 LIMIT
은 MySQL에서 사용하는 문법이었다. 오라클에서는 ROWNUM
을 LIMIT
대신 사용한다고 한다.
그렇다고 아래와 같이 코딩하면 에러가 발생한다.
SELECT NAME
FROM ANIMAL_INS
WHERE ROWNUM <= 10
ORDER BY DATETIME ASC;
왜냐하면, 쿼리가 실행되는 순서가 있기 때문이다. 쿼리는 FROM - WHERE - GROUP BY - SELECT - ORDER BY 순으로 실행된다.
참고문헌
[1] SELECT. 코딩테스트 연습 - 여러 기준으로 정렬하기 | 프로그래머스 (programmers.co.kr). Programmers. (accessed Sep 15, 2021)
[2] higee, [oracle] 상위 n개 데이터만 뽑고 싶은 경우 : 네이버 블로그 (naver.com). Naver Blog (accessed Sep 15, 2021)
Ghost