반응형
함수별 성능 차이
- ROW_NUMBER(): 각 행에 고유한 순위를 부여하므로, 동일한 값에 대해 특별한 처리를 하지 않아도 됩니다. 따라서 가장 단순한 계산을 수행합니다.
- RANK(): 동일한 값에 대해 동일한 순위를 부여하고, 다음 순위를 건너뛰기 때문에 좀 더 복잡한 계산이 필요합니다.
- DENSE_RANK(): 동일한 값에 대해 동일한 순위를 부여하지만, 다음 순위를 건너뛰지 않으므로 RANK()보다는 덜 복잡하지만 ROW_NUMBER()보다는 복잡합니다.
Oracle에서 그룹별로 순위를 부여하는 방식은 ROW_NUMBER(), RANK(), 그리고 DENSE_RANK() 함수들을 사용하여 쉽게 구현할 수 있습니다. 각 함수는 약간씩 다른 방식으로 순위를 매기지만, 이 포스팅에서는 ROW_NUMBER() 함수를 사용하여 그룹별 순위를 부여하는 방법을 설명하겠습니다.
ROW_NUMBER()를 사용한 그룹별 순위 부여 방법
1. ROW_NUMBER() 함수란?
ROW_NUMBER() 함수는 쿼리 결과 집합에서 각 행에 고유한 번호를 할당합니다. 이 함수는 OVER() 절과 함께 사용되며, 특히 PARTITION BY 절과 ORDER BY 절을 조합하여 특정 그룹 내에서 순위를 부여할 수 있습니다.
2. 예제 테이블 및 데이터
먼저, 순위를 부여할 예제 테이블과 데이터를 준비해 보겠습니다.
CREATE TABLE sales (
salesperson VARCHAR2(50),
region VARCHAR2(50),
sales_amount NUMBER
);
INSERT INTO sales (salesperson, region, sales_amount) VALUES ('Alice', 'East', 500);
INSERT INTO sales (salesperson, region, sales_amount) VALUES ('Bob', 'West', 300);
INSERT INTO sales (salesperson, region, sales_amount) VALUES ('Charlie', 'East', 700);
INSERT INTO sales (salesperson, region, sales_amount) VALUES ('David', 'West', 200);
INSERT INTO sales (salesperson, region, sales_amount) VALUES ('Eve', 'East', 600);
3. 그룹별 순위 부여 쿼리
이제 ROW_NUMBER() 함수를 사용하여 지역별로 매출액에 따라 순위를 부여하는 쿼리를 작성해 보겠습니다.
SELECT
salesperson,
region,
sales_amount,
ROW_NUMBER() OVER (PARTITION BY region ORDER BY sales_amount DESC) AS rnk
FROM
sales;
4. 쿼리 결과
위 쿼리의 결과는 다음과 같습니다.
5. 설명
- PARTITION BY region: 지역(region)별로 그룹을 나눕니다.
- ORDER BY sales_amount DESC: 매출액(sales_amount)을 기준으로 내림차순으로 정렬합니다.
- ROW_NUMBER(): 각 그룹 내에서 정렬된 순서대로 고유한 순위를 부여합니다.
이와 같이 ROW_NUMBER() 함수를 사용하여 특정 그룹 내에서 원하는 기준으로 정렬하고 순위를 부여할 수 있습니다. 이 방법은 데이터 분석이나 리포팅에서 매우 유용하게 사용될 수 있습니다.
반응형
'Oracle' 카테고리의 다른 글
Import CSV raw data from an Oracle database: Using Database Import (0) | 2024.06.21 |
---|---|
The boundaries of data validation queries: From accuracy to security (0) | 2024.06.21 |
SQL Loader (0) | 2024.06.14 |
Self alias and Outer join (1) | 2024.06.11 |
Essential TOAD for Oracle Shortcuts for Efficient Database Management (0) | 2024.05.22 |