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

- Author: @mildsalmon
- Published: 2021-09-15
- Updated: 2021-09-15
- Source: http://blex.me/@mildsalmon/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%83%81%EC%9C%84-n%EA%B0%9C-%EB%A0%88%EC%BD%94%EB%93%9C
- Tags: 프로그래머스, 코딩테스트, 문제, 오라클, select, sql, orderby, r

---

# 1. 상위 n개 레코드

### A. 문제

위 프로그래머스 사이트에 접속하여 문제를 확인해주세요.

### B. 내 답안

```SQL

-- 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. 추가적인 설명

상위 n개 데이터만 추출하는 방법으로 `LIMIT`을 알고 있었다. 그런데 자꾸 에러가 발생했다. 알고보니 `LIMIT`은 MySQL에서 사용하는 문법이었다. 오라클에서는 `ROWNUM`을 `LIMIT` 대신 사용한다고 한다.

그렇다고 아래와 같이 코딩하면 에러가 발생한다.

```sql

SELECT NAME
FROM ANIMAL_INS
WHERE ROWNUM <= 10
ORDER BY DATETIME ASC;

```

왜냐하면, 쿼리가 실행되는 순서가 있기 때문이다. 쿼리는 **FROM - WHERE - GROUP BY - SELECT - ORDER BY** 순으로 실행된다.

# 참고문헌

[1] SELECT. [코딩테스트 연습 - 여러 기준으로 정렬하기 | 프로그래머스 (programmers.co.kr)](https://programmers.co.kr/learn/courses/30/lessons/59404). Programmers. (accessed Sep 15, 2021)

[2] higee, [[oracle] 상위 n개 데이터만 뽑고 싶은 경우 : 네이버 블로그 (naver.com)](https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=nomadgee&logNo=220854618303). Naver Blog (accessed Sep 15, 2021)
