mariadb 윈도우함수 row_number 활용하기

단밤v 2023. 8. 20. 10:10
728x90
반응형

안녕하세요.

 

이번 포스팅에서는

mariadb 윈도우 함수 중 row_number에 대해

파헤쳐 볼까 합니다.

 

윈도우 함수에 대해 모르신다면

아래 클릭하셔서 개념을 보고 오세요.

 

 

 

 

ROW_NUMBER 사용법

 

row_number는 순번 혹은 순위를 표시해주는 윈도우 함수입니다.

row_number의 사용 문법은 아래와 같습니다.

 

ROW_NUMBER() OVER (
  [ PARTITION BY partition_expression ]
  [ ORDER BY order_list ]
)

 

 

의외로 사용법이 간단합니다.

PARTITION BY 절로 그룹을 나눈 후에

ORDER BY 절로 순서를 정합니다.

 

 

ROW_NUMBER 실제 사용 예시

 

row_number를 사용하기 전에

테이블 생성 및 데이터를 만들어볼게요.

 

create table sales_performance(
 empname varchar(100) default '' not null comment '사원이름',
 year varchar(4) default '' not null comment '영업 년',
 month varchar(2) default '' not null comment '영업 월',
 sales int(20) default 0 not null comment '판매실적, 단위 천원'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


insert into sales_performance values('홍길동','2023','05',115242);
insert into sales_performance values('홍길동','2023','06',104234);
insert into sales_performance values('홍길동','2023','07',148531);
insert into sales_performance values('홍길동','2023','08',95414);
insert into sales_performance values('이순진','2023','05',104785);
insert into sales_performance values('이순진','2023','06',115698);
insert into sales_performance values('이순진','2023','07',85414);
insert into sales_performance values('이순진','2023','08',121457);
insert into sales_performance values('김기섭','2023','05',128541);
insert into sales_performance values('김기섭','2023','06',114569);
insert into sales_performance values('김기섭','2023','07',91423);
insert into sales_performance values('김기섭','2023','08',154123);
insert into sales_performance values('윤미소','2023','05',100045);
insert into sales_performance values('윤미소','2023','06',112345);
insert into sales_performance values('윤미소','2023','07',135657);
insert into sales_performance values('윤미소','2023','08',114578);

 

해당 테이블은 매월 사원들의 판매실적을 저장하는 테이블이고

2분기 (5월~8월) 실적만 데이터를 만들었습니다.

 

 

자 그럼, 이 테이블에서 유의한 데이터를 어떻게 조회 해볼 수 있을까요?

 

 

Q1. 년월별마다 사월별로 가장 높은 판매액순으로 데이터 추출

 

select
 row_number() over(partition by year, month order by sales desc) as rank, 
 year, month, empname, sales 
from sales_performance

 

over 의 괄호안에

년월별로 파트를 만들고 ( partition by year,month )

판매액 오름차순으로 나오게 하면 됩니다. ( order by sales desc )

 

Q2. 2분기에 년월 구분없이 가장 높은 판매액순으로 데이터 추출

 

select
 row_number() over(order by sales desc) as rank,
 year, month, empname, sales 
from sales_performance

 

Q1 보다는 간단합니다.

행 별로 순위를 매겨서 데이터 집합을 조회하는 방법입니다.

 

굳이 순위를 안매기실거면

row_number없이 아래 쿼리처럼 해도 됩니다.

 

select * from sales_performance order by sales desc

 

 

SQL문을 익힐때는

직접 데이터를 만들고 직접 SQL문을 짜보셔야

실력이 금방금방 늘 수 있습니다.

 

눈으로만 보시지 마시고

꼭 실습을 해보시길 권장드려요 ^^

 

이상입니다.

 

 

감사합니다.

 

728x90
반응형