SQL ROW_NUMBER 함수로 데이터에 순번 매기기

1. 핵심 원리

ROW_NUMBER 함수는 SQL에서 각 행에 고유한 순번을 부여하는 윈도우 함수입니다. 이 함수는 OVER 절 내에서 지정한 정렬 순서에 따라 행 번호를 매기며, 동일한 값이 있더라도 각각 고유한 순번을 부여합니다.

2. 실무에서 쓰이는 이유

실무에서 ROW_NUMBER 함수는 다음과 같은 이유로 사용됩니다:

  • 데이터 순서 지정: 데이터에 순번을 부여하여 특정 기준에 따른 정렬 결과를 나타낼 수 있습니다.
  • 페이지네이션: 큰 데이터셋을 페이지 단위로 나눠서 조회할 때 각 페이지의 순번을 매기기 위해 사용됩니다.
  • 중복 제거: 중복된 데이터를 순번을 통해 식별하고 제거할 때 유용합니다.

3. 실무에서 구체적으로 사용되는 상황

ROW_NUMBER 함수는 다음과 같은 상황에서 자주 사용됩니다:

  • 고객 순위: 고객의 구매 금액을 기준으로 순위를 매겨 고객별 성과를 평가할 때.
  • 매출 순위: 제품의 판매량에 따라 순위를 매겨 인기 제품을 분석할 때.

예상 상황 예측:

  • 예시 1: 각 고객이 특정 기간 동안 발생시킨 매출에 따라 순위를 매겨 VIP 고객을 선정.
  • 예시 2: 각 제품의 월별 판매량에 따라 순위를 매겨 베스트셀러를 분석.

4. 자주 사용되는 윈도우 방식 및 설명

ROW_NUMBER 함수는 다음과 같은 윈도우 방식과 함께 사용됩니다:

  1. OVER (ORDER BY column)
  • 설명: 지정한 열의 값에 따라 행에 고유한 순번을 매깁니다.
  • 사용 예시:
    sql SELECT empno, ename, sal, ROW_NUMBER() OVER (ORDER BY sal DESC) AS 번호 FROM emp WHERE deptno = 20;
  1. OVER (PARTITION BY column ORDER BY column)
  • 설명: 특정 열을 기준으로 데이터 그룹을 나누고, 각 그룹 내에서 순번을 매깁니다.
  • 사용 예시:
    sql SELECT deptno, ename, sal, ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal DESC) AS 번호 FROM emp;

5. 연습 문제

문제 1:

다음의 테이블에서 직원의 급여에 따라 순위를 매기는 SQL 쿼리를 작성하시오.

  • 테이블: employee
  • 열: empno, ename, salary

문제 2:

부서별로 직원의 급여에 따라 순위를 매기는 SQL 쿼리를 작성하시오.

  • 테이블: employee
  • 열: deptno, empno, salary

6. 연습 문제 해답

해답 1:

SELECT empno, ename, salary, 
       ROW_NUMBER() OVER (ORDER BY salary DESC) AS 순위
FROM employee;

해답 2:

SELECT deptno, empno, ename, salary, 
       ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY salary DESC) AS 부서별순위
FROM employee;

7. 응용 문제

문제 1:

각 제품의 판매량에 따라 순위를 매기는 SQL 쿼리를 작성하시오.

  • 테이블: product_sales
  • 열: product_id, product_name, sales

문제 2:

각 지역별로 지점의 매출에 따라 순위를 매기는 SQL 쿼리를 작성하시오.

  • 테이블: branch_sales
  • 열: region, branch_id, revenue

8. 응용 문제 해답

해답 1:

SELECT product_id, product_name, sales, 
       ROW_NUMBER() OVER (ORDER BY sales DESC) AS 판매순위
FROM product_sales;

해답 2:

SELECT region, branch_id, revenue, 
       ROW_NUMBER() OVER (PARTITION BY region ORDER BY revenue DESC) AS 지역별순위
FROM branch_sales;

9. 전자상거래 업계에서의 사용 예시

사용될 수 있는 경우 예측:

  • 베스트셀러 분석: 각 제품의 판매량에 따라 순위를 매겨 인기 상품을 선정할 때.
  • 고객 기여도 분석: 각 고객의 구매 금액에 따라 순위를 매겨 VIP 고객을 분석할 때.

예상 상황 문제:

  1. 각 상품의 월별 판매량에 따라 순위를 매기는 SQL 쿼리를 작성하시오.
  2. 각 고객의 연간 구매 금액에 따라 순위를 매기는 SQL 쿼리를 작성하시오.

SQL 코드 및 시각적 예시

문제 1 SQL 코드:

SELECT product_id, month, sales, 
       ROW_NUMBER() OVER (PARTITION BY month ORDER BY sales DESC) AS 월별판매순위
FROM monthly_sales;
예시 테이블:
product_idmonthsales월별판매순위
101Jan10001
102Jan8002
101Feb12001
102Feb10002

문제 2 SQL 코드:

SELECT customer_id, year, total_spent, 
       ROW_NUMBER() OVER (PARTITION BY year ORDER BY total_spent DESC) AS 연간구매순위
FROM customer_spending;
예시 테이블:
customer_idyeartotal_spent연간구매순위
001202350001
002202345002
001202460001
002202455002

Posts created 411

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top