[PostgreSQL] Oracle의 ROWNUM = 1처럼 가져오는 데이터의 개수를 제한하는 함수(키워드) 및 예제 쿼리
PostgreSQL에서 Oracle의 ROWNUM = 1처럼 가져오는 데이터의 개수를 제한하는 함수(키워드)는 LIMIT입니다.
SELECT *
FROM 테이블명
ORDER BY 정렬기준 컬럼 DESC
LIMIT 1; -- 오라클의 WHERE ROWNUM = 1과 동일한 역할
- 쿼리문 가장 마지막에
LIMIT 1을 붙여주시면 됩니다.
표준 SQL 방식 (FETCH FIRST)
PostgreSQL은 SQL 표준인 FETCH FIRST 1 ROWS ONLY 구문도 완벽하게 지원합니다.
SELECT *
FROM 테이블명
ORDER BY 정렬기준 컬럼 DESC
FETCH FIRST 1 ROWS ONLY;
⚠️ 주의할 점
오라클의ROWNUM과 마찬가지로, 정렬 기준(ORDER BY) 없이LIMIT만 사용하면 데이터베이스가 임의로 무작위 데이터를 1건 반환하므로 원하는 정렬 기준을 먼저 지정하는 것이 좋습니다.
FETCH FIRST 1 ROWS ONLY;구문에서FIRST는 “정렬된 결과의 맨 처음부터” 데이터를 가져오겠다는 뜻입니다.
FIRST대신NEXT를 사용할 수 있습니다. 두 키워드는 기능적으로 완전히 동일하며, 단어 뜻에 맞춰 쿼리를 더 자연스럽게 읽히도록 하기 위해 구분하여 사용합니다.
1. FIRST와 NEXT의 차이 (의미적 차이)
보통 단독으로 상위 N개 행을 가져올 때는 FIRST를 쓰고, 앞선 행들을 건너뛰고(Offset) 그다음 행들을 가져오는 페이징 처리를 할 때는 NEXT를 사용하면 문장이 자연스러워집니다.
FIRST(처음부터)
-- 처음(FIRST)부터 딱 5개 행만 가져온다.
SELECT * FROM 테이블명
FETCH FIRST 5 ROWS ONLY;
NEXT(그다음부터)
-- 앞에 10개 행은 건너뛰고(OFFSET), "그다음(NEXT)" 5개 행을 가져온다.
SELECT * FROM 테이블명
OFFSET 10 ROWS
FETCH NEXT 5 ROWS ONLY;
※ 사실 PostgreSQL에서는 OFFSET 10 ROWS FETCH FIRST 5 ROWS ONLY;라고 써도 똑같이 잘 작동합니다. NEXT는 문맥상 가독성을 높이기 위한 표준 SQL의 배려입니다.
2. ONLY 대신 쓸 수 있는 다른 키워드: WITH TIES
FETCH 구문에는 FIRST/NEXT 외에도 뒤쪽의 ONLY를 WITH TIES로 바꿀 수 있는 아주 강력한 기능이 있습니다.
ONLY: 지정한 개수만큼 딱 끊어서 가져옵니다.WITH TIES: 마지막 행과 동점(동일한 정렬 값)인 데이터가 있다면, 지정한 개수를 초과하더라도 전부 결과에 포함시킵니다.
💡 예시로 보는 차이점 (점수 기준 내림차순 정렬)
만약 데이터가 아래와 같고, 공동 2등이 2명인 상황에서 상위 2명만 뽑고 싶다면?
| 이름 | 점수 |
|---|---|
| 김철수 | 100점 (1등) |
| 이영희 | 90점 (공동 2등) |
| 박민수 | 90점 (공동 2등) |
FETCH FIRST 2 ROWS ONLY;결과- 김철수, 이영희 (딱 2명만 출력, 박민수는 탈락)
FETCH FIRST 2 ROWS WITH TIES;결과- 김철수, 이영희, 박민수 (2명을 지정했지만, 마지막 데이터인 이영희와 박민수의 점수가 90점으로 같으므로 동점자까지 모두 포함하여 3명 출력)
⚠️ 주의:
WITH TIES를 사용할 때는 데이터의 동점 기준을 명확히 해야 하므로, 반드시ORDER BY절이 함께 있어야만 작동합니다.
[연관자료]
- [PostgreSQL]프로시저 또는 함수내에서 특정 컬럼이나 문자열 찾는 쿼리
- [PostgreSQL] 가장 디스크를 많이 괴롭히는 쿼리 top 10 뽑기
- [PostgreSQL] 통계 쿼리 조건절 컬럼 가공을 제거 해서 인덱스를 타게 하는 방법
- [PostgreSQL] 인덱스 리빌드 (REINDEX)(재생성)하는 대표적인 방법 3가지
- [PostgreSQL] 스왑(swap)을 유발하는 무거운 쿼리 찾는 방법
- [PostgreSQL] 통계 일일 배치 실행시, 월별 누적에 당일(전일) 배치 실행 결과 더해서 처리하는 방법(DO UPDATE SET)
- [PostgreSQL] 서버 재시작하지 않고 무중단으로 SWAP 메모리 초기화 하는 방법 & 이슈 대처 방법 포함




