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
반응형
'데이터베이스 > Maria' 카테고리의 다른 글
mariadb 윈도우함수 LAG, LEAD 활용하기 (0) | 2023.09.12 |
---|---|
mariadb 윈도우함수 dense_rank 활용하기 (0) | 2023.08.22 |
macos 마리아 db 설치하기 (0) | 2023.01.02 |