티스토리 뷰
오라클 SQL에서 `ROW_NUMBER()` 함수 사용법
오라클 SQL에서 `ROW_NUMBER()` 함수는 각 행에 고유한 순번을 부여하는데 사용됩니다. 이 함수는 데이터에 순서를 매기고자 할 때 매우 유용합니다. 특히, 페이징 쿼리나 특정 조건에 따라 정렬된 순번을 생성할 때 자주 사용됩니다.
기본 문법
`ROW_NUMBER()` 함수는 `OVER` 절과 함께 사용됩니다. `OVER` 절 내에서는 `PARTITION BY`와 `ORDER BY` 절을 사용할 수 있습니다.
ROW_NUMBER() OVER (PARTITION BY column1 ORDER BY column2)
- `PARTITION BY`는 데이터를 특정 컬럼을 기준으로 그룹화합니다.
- `ORDER BY`는 순번을 매길 기준이 되는 정렬을 지정합니다.
예제 1: 기본 사용법
다음 예제는 각 행에 순번을 부여하여 결과를 반환합니다. 순번은 `column2`를 기준으로 오름차순 정렬됩니다.
SELECT
column1,
column2,
ROW_NUMBER() OVER (ORDER BY column2) AS row_num
FROM
your_table;
이 쿼리는 `your_table`의 모든 행을 `column2` 기준으로 정렬하고, 각 행에 1부터 시작하는 순번을 부여합니다.
예제 2: 그룹화하여 순번 매기기
`PARTITION BY` 절을 사용하여 특정 컬럼을 기준으로 그룹화된 순번을 매길 수 있습니다. 다음 예제는 `column1`을 기준으로 데이터를 그룹화하고, 각 그룹 내에서 `column2`를 기준으로 순번을 매깁니다.
SELECT
column1,
column2,
ROW_NUMBER() OVER (PARTITION BY column1 ORDER BY column2) AS row_num
FROM
your_table;
이 쿼리는 `column1`의 값에 따라 데이터를 그룹화한 후, 각 그룹 내에서 `column2`를 기준으로 순번을 부여합니다.
예제 3: 페이징 쿼리
`ROW_NUMBER()` 함수는 페이징 쿼리를 작성할 때도 유용합니다. 예를 들어, 10개씩 페이지를 나누어 데이터를 조회하고자 할 때 다음과 같이 사용할 수 있습니다.
SELECT *
FROM (
SELECT
your_table.*,
ROW_NUMBER() OVER (ORDER BY column2) AS row_num
FROM
your_table
)
WHERE row_num BETWEEN 11 AND 20;
이 쿼리는 `column2` 기준으로 정렬된 `your_table`의 11번째부터 20번째 행을 반환합니다. 이 방식으로 손쉽게 페이지별 데이터를 조회할 수 있습니다.
주의사항
1. 성능: `ROW_NUMBER()` 함수는 큰 데이터셋에서 사용할 때 성능에 영향을 줄 수 있습니다. 필요한 인덱스를 생성하여 성능을 최적화하는 것이 좋습니다.
2. 순번 일관성: 정렬 기준이 고유하지 않으면, 동일한 값을 가진 행의 순번이 일관되지 않을 수 있습니다. 이를 피하기 위해 다중 컬럼을 사용하여 정렬 기준을 설정하는 것이 좋습니다.
결론
오라클 SQL에서 `ROW_NUMBER()` 함수는 각 행에 고유한 순번을 부여할 때 매우 유용합니다. `OVER` 절과 함께 사용하여 다양한 정렬 및 그룹화 조건을 지정할 수 있으며, 페이징 쿼리와 같은 실용적인 용도로도 활용할 수 있습니다. 성능과 순번의 일관성을 고려하여 적절히 사용하면 데이터 처리에 큰 도움이 됩니다.
'SQL for business_응용' 카테고리의 다른 글
SQL_응용_생년월일기준으로 특정시점 기준 만나이 구하는 법 (0) | 2024.08.07 |
---|---|
SQL_응용_날짜컬럼간 차이 일수 시간 분 계산 (0) | 2024.07.31 |
SQL_응용_LISTAGG 함수_여러 행을 한 행으로 정렬 (0) | 2024.07.27 |
SQL_응용_UNION 병합 함수 (0) | 2024.07.01 |
SQL_응용_NOT IN, IN, NOT EXISTS, EXISTS 비교 (0) | 2024.07.01 |