반응형
오라클에서 ROW의 순번을 메겨 조회할때 ROWNUM을 이용한다.
1. ROWNUM 기본 사용법
시스템 함수 ROWNUM을 사용하면 아래와 같이 ROW의 순번을 가져올 수 있다.
SELECT ROWNUM,
USER_NAME,
USER_AGE,
JOIN_DATE
FROM USER_INFO
2. ORDER BY 후 순번 메기기
ORDER BY로 정렬시킬 경우, ROWNUM으로 순번을 매긴 후 ORDER BY 정렬을 하기 때문에 ROWNUM의 순서가 아래와 같이 뒤섞이게 된다.
SELECT ROWNUM,
USER_NAME,
USER_AGE,
JOIN_DATE
FROM USER_INFO
ORDER BY USER_AGE
ORDER BY후 섞여버린 ROWNUM이 정렬되어 순서대로 보여지기 원할때는 서브쿼리를 이용하면 된다.
SELECT ROWNUM,
USER_NAME,
USER_AGE,
JOIN_DATE
FROM ( SELECT USER_NAME,
USER_AGE,
JOIN_DATE
FROM USER_INFO
ORDER BY USER_AGE
)
3. 정렬된 데이터의 MAX, MIN값 가져오기
ORDER BY를 통해 기준값을 정렬시킨 후 WHERE절에 ROWNUM이 1인 데이터를 걸어두면 기준값의 MAX,MIN를 가져올 수 있다. (MIN값을 찾을땐 ORDER BY DESC를 사용하면 된다)
SELECT ROWNUM,
USER_NAME,
USER_AGE,
JOIN_DATE
FROM ( SELECT USER_NAME,
USER_AGE,
JOIN_DATE
FROM USER_INFO
ORDER BY USER_AGE
)
WHERE ROWNUM = 1
4. 그룹별 순번 메기기 _ ROW_NUMBER() 함수
사실 2번의 방법대로 서브쿼리를 통해 정렬 후 순번을 메기는 방법은 상당히 비효율적이다.
오라클의 ROW_NUMBER() 함수를 이용하면 간단하게 정렬 후 순번을 메길 수 있다.
SELECT ROW_NUMBER() OVER (ORDER BY USER_AGE) AS NUM,
USER_NAME,
USER_AGE,
JOIN_DATE
FROM USER_INFO
반응형
'Database > Oracle' 카테고리의 다른 글
[Oracle] ORA-01810: 형식 코드가 두 번 나타났습니다 (0) | 2022.01.14 |
---|---|
[Oracle] ORA-01861: 리터럴이 형식 문자열과 일치하지 않음 (0) | 2022.01.11 |
[Oracle] 오라클 최근 저장된 데이터 가져오기 (0) | 2021.11.16 |
[Oracle] 오라클 정규식 REGEXP 함수 (1/2) (1) | 2021.10.13 |
[ORACLE] SQL DEVELOPER 화면 접속창이 사라졌을때 (2) | 2021.10.06 |
최근댓글