반응형
청춘고양이
배움을 기록하는 곳
청춘고양이
전체 방문자
오늘
어제
  • Hello World (119)
    • JQuery (5)
    • In my opinion (4)
    • HTML&CSS (8)
    • JS (9)
    • JAVA (21)
    • Spring Boot (21)
    • Node.js (1)
    • Linux (7)
    • Git (2)
    • Kotlin (4)
    • Fluttor (4)
    • 정보처리기사 (19)
    • AWS (1)
    • Oracle (8)
    • MySQL (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 쉬프트 연산
  • 청춘고양이
  • spring 기본설정
  • 자바
  • 스크롤js
  • 가위바위보js
  • ScrollEffectJs
  • 제이쿼리 패스워드 변경
  • 제이쿼리 비밀번호
  • js 로또 번호
  • 객체 안의 함수
  • js 패스워드 변경
  • 초보개발
  • js 비밀번호
  • 제이쿼리
  • css
  • js
  • 제이쿼리 버튼클릭시 색 변경
  • 자바db연동
  • 중복 제거 로또

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
청춘고양이

배움을 기록하는 곳

Ranking by group with ROW_NUMBER()
Oracle

Ranking by group with ROW_NUMBER()

2024. 6. 14. 17:26
반응형

함수별 성능 차이

  • 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
    'Oracle' 카테고리의 다른 글
    • Import CSV raw data from an Oracle database: Using Database Import
    • The boundaries of data validation queries: From accuracy to security
    • SQL Loader
    • Self alias and Outer join
    청춘고양이
    청춘고양이
    신입개발자

    티스토리툴바