상세 컨텐츠

본문 제목

오라클 데이터베이스(Oracle Database) - RANK() OVER(PARTITION BY)

데이터베이스/Oracle

by JORDON 2023. 11. 12. 13:14

본문

반응형

데이터베이스 관리의 동적 영역에서는 정확성과 효율성이 중추적인 역할을 합니다. 이 분야의 충실한 오라클은 데이터 작업을 간소화하기 위한 수많은 기능을 제공합니다. Oracle의 강력한 기능 중 하나는 데이터 정렬 최적화를 위한 다용도 도구인 RANK() 함수입니다. 이 탐구에서는 RANK()의 복잡성을 조사하고 데이터 정렬 노력을 변화시킬 수 있는 잠재력을 알아낼 것입니다.

RANK()의 본질 이해

데이터 구성은 효과적인 데이터베이스 관리의 초석입니다. Oracle 함수인 RANK()는 능숙한 정렬 기능을 원하는 사람들을 위한 신호로 떠오르고 있습니다. 하나 이상의 열에 있는 값을 기반으로 결과 집합 내의 각 행에 고유한 순위를 할당합니다. 이를 통해 사용자는 각 행의 계층적 위치를 식별할 수 있어 미묘한 데이터 분석이 가능합니다.

// 테이블 생성 및 테스트데이터 입력
CREATE TABLE sales_data (
    product_name VARCHAR2(50),
    sales_amount NUMBER,
    sales_date 
    sales_amount NUMBER,
DATE
);

INSERT INTO sales_data VALUES ('Product A', 1000, TO_DATE('2023-01-01', 'YYYY-MM-DD'));
INSERT INTO sales_data VALUES ('Product B', 1500, TO_DATE('2023-01-01', 'YYYY-MM-DD'));
INSERT INTO sales_data VALUES ('Product A', 1200, TO_DATE('2023-01-02', 'YYYY-MM-DD'));
INSERT INTO sales_data VALUES ('Product C', 800, TO_DATE('2023-01-02', 'YYYY-MM-DD'));

파티셔닝 활용

RANK()의 한 가지 강력한 측면은 분할된 데이터 세트를 처리하는 데 능숙하다는 것입니다. 날짜 범위 또는 범주와 같은 특정 기준에 따라 결과 집합을 분할함으로써 RANK()는 이러한 파티션 내에서 작동합니다. 이를 통해 정렬에 대한 세분화된 접근 방식이 가능해지며 사용자는 데이터의 특정 세그먼트에서 통찰력을 추출할 수 있습니다. 판매 수치를 분석하든 사용자 참여 지표를 분석하든 RANK()를 사용한 분할은 쿼리에 대한 목표 렌즈를 제공합니다.

// 상품이름, 상품수량, 판매일자, 많이 판매된 상품의 수량을 기준으로 상품을 이름을 정렬하여 RANK를 부여하여 조회한다.
SELECT
    product_name,
    sales_amount,
    sales_date,
    RANK() OVER (PARTITION BY product_name ORDER BY sales_amount DESC) AS sales_rank
FROM
    sales_data;
| Product Name | Sales Amount | Sales Date | Sales Rank |
|--------------|--------------|------------|------------|
| Product A    | 1200         | 2023-01-02 | 1          |
| Product A    | 1000         | 2023-01-01 | 2          |
| Product B    | 1500         | 2023-01-01 | 1          |
| Product C    | 800          | 2023-01-02 | 1          |

위의 예제에서 파티셔닝으로 A상품을 묶고 그중에 가장 많이 팔린 수량을 기준으로 정렬을 하였으니 RANK가 1과 2로 표시되고 상품B와 상품C는 각각의 파티셔닝으로 묶여 있기 때문에 가장 많이 팔린 수량은 자기자신이 되기 떄문에 RANK가 1로 표시된다. 만약, B상품에 상품판매량이 1800이 있다면 상품B와 판매수량 1800의 RANK가 1이 되고 상품B와 판매수량 1500의 RANK가 2로 표시된다.    

ORDER BY를 사용하여 동적 쿼리 작성

RANK()는 ORDER BY 절과 결합될 때 잠재력을 최대한 발휘합니다. 이 다이나믹 듀오를 통해 사용자는 특정 요구 사항에 따라 정렬 논리를 조정할 수 있습니다. 오름차순 또는 내림차순으로 정렬하든, 복잡한 정렬 패턴을 위해 여러 열을 결합하든 ORDER BY는 RANK()의 정렬 심포니를 조율하는 지휘자 ​​역할을 합니다. 이러한 시너지 효과를 통해 사용자는 수집된 데이터에서 원하는 통찰력을 정확하게 추출할 수 있습니다.

// 테이블 생성 및 테스트 데이터 입력
CREATE TABLE students (
    student_id NUMBER,
    student_name VARCHAR2(50),
    exam_subject VARCHAR2(
    exam_subject VARCHAR2
50),
    exam_score NUMBER
);

INSERT INTO students VALUES (1, 'Alice', 'Math', 90);
INSERT INTO students VALUES (2, 'Bob', 'Math', 85);
INSERT INTO students VALUES (3, 'Alice', 'History', 75);
INSERT INTO students VALUES (4, 'Bob', 'History', 88);
INSERT INTO students VALUES (5, 'Alice', 'Science', 92);
INSERT INTO students VALUES (6, 'Bob', 'Science', 80);
// 학생ID, 학생이름, 시험과목, 시험점수를 조회하는데 각각의 과목성적의 순위와 전체 점수의 순위를 매기는 방법이다.
SELECT
    student_id,
    student_name,
    exam_subject,
    exam_score,
    RANK() OVER (PARTITION BY exam_subject ORDER BY exam_score DESC) AS subject_rank,
    RANK() OVER (ORDER BY exam_score DESC) AS overall_rank
FROM
    students;
    
 // 첫번째 랭크는 시험성적을 기준으로 내림차순으로 과목점수에 대한 랭크를 표시한다.
 // 두번째 랭크는 전체 성적에 대한 시험점수를 내림차순으로 랭크를 표시한다.
| 
|Student ID | Student Name | Exam Subject | Exam Score | Subject Rank | Overall Rank |
|------------|--------------|--------------|------------|--------------|--------------|
| 1          | Alice        | Math         | 90         | 1            | 1            |
| 2          | Bob          | Math         | 85         | 2            | 3            |
| 3          | Alice        | History      | 75         | 2            | 5            |
| 4          | Bob          | History      | 88         | 1            | 2            |
| 5          | Alice        | Science      | 92         | 1            | 1            |
| 6          | Bob          | Science      | 80         | 2            | 6            |

결론

끊임없이 진화하는 데이터 관리 환경에서 Oracle의 RANK()는 정렬 및 분석의 복잡성을 해결하는 사람들을 위한 든든한 동맹자로 부상하고 있습니다. 특히 파티셔닝 및 ORDER BY와 결합된 다목적성은 데이터 설계자와 분석가 모두에게 강력한 도구로 자리매김합니다. 데이터 여정을 시작할 때 정렬 작업의 정확성과 효율성을 높이기 위해 RANK()를 도구 키트에 통합하는 것을 고려해 보십시오. 정밀도와 성능이 만나는 Oracle의 RANK() 기능을 사용하여 데이터 정렬 작업을 향상시키십시오.

반응형

관련글 더보기

댓글 영역