ROWNUM
- SELECT 해온 데이터에 일련번호를 매기며, 무조건 1번부터 차례대로 붙여진다.
- 특정 집합에서 원하는 만큼의 행만 가져오고 싶을 때 활용할 수 있다.
- 순서가 결정 된 후 ORDER BY로 정렬되므로 ROUNUM과 ORDER BY를 함께 사용하면 순서가 뒤섞일 수 있다.
원하는 결과를 얻기 위해선, 서브 쿼리 결과(ORDER BY)에 ROWNUM을 매겨야 한다.
예시
SELECT * FROM TABLE WHERE ROUNUM <=3 -- TOP3의 데이터 추출
SELECT ROUNUM, NAME FROM TABLE WHERE AGE >= 20 -- 20살 이상인 사람의 데이터를 ROUNUM을 붙여 추출
SELECT ROWNUM, T1.*
FROM ( SELECT *
FROM TABLE
ORDER BT AGE) T1
-- 나이순으로 ROWNUM을 붙여서 데이터 추출
ROW_NUMBER()
ROW_NUMBER() OVER(PARTITION BY 그룹핑할 컬럼 (선택) ORDER BY 정렬할 컬럼(필수))
- 각 PARTITION 내에서 ORDER BY절에 의해 정렬된 순서를 기준으로 일련번호가 매겨진다.
- 그룹별(PARTITION)로 순번을 따로 부여할 수 있기 때문에, ORDER BY 된 결과에 순번을 매길 때에는 ROWNUM 보다 ROW_NUMBER() 함수가 더 편하다.
예시
SELECT ROU_NUMBER OVER(ORDER BY AGE, BIRTH), T1.* FROM TABLE T1 WHERE AGE >= 20
-- 20살 이상의 사람 데이터를 AGE, BIRTH순서대로 ROW값을 붙여 추출
SELECT ROU_NUMBER OVER(PARTITION BY BIRTH ORDER BY AGE, BIRTH), NAME, AGE FROM TABLE WHERE AGE >= 20
-- 20살 이상의 사람 데이터를 AGE, BIRTH순서대로추출 후 BIRTH마다 ROW를 붙여 추출
SELECT T2.*
FROM ( SELECT ROU_NUMBER OVER(PARTITION BY GENDER ORDER BY AGE DESC) ROWNUM, T1.*
FROM TABLE T1) T2
WHERE T2.ROWNUM = 1
-- 성별마다 나이가 가장 많은 사람의 데이터 추출
https://turing0809.tistory.com/48
https://tychejin.tistory.com/201
'DataBase > Oracle' 카테고리의 다른 글
[Oracle] 테이블 삭제, 완전삭제(Purge) - DROP (0) | 2023.01.10 |
---|---|
[Oracle] 자릿수 채우기, 공백 채우기 - LPAD, RPAD (0) | 2022.11.20 |
[Oracle] NULL값을 치환해주는 함수 - NVL, NVL2, NULLIF (0) | 2022.11.20 |
[Oracle] Pro*C - 간단정리 (0) | 2022.10.10 |
[Oracle] 문자열 관련 함수 - SUBSTR, INSRT, REPLACE, TRANSLATE, CONCAT (0) | 2022.08.11 |