본문 바로가기
DATABASE

Q. 고객등급별 주문 건수 조회

by nyang2 2023. 12. 2.

필요 데이터:

데이터 모두 instacart002.orders

고객ID ➜ user_id

주문ID ➜ order_id

 

고객등급

고객의 수가 총 3159명이기 때문에 3160명으로 가정하고 10분위로 구분!

1분위 : (01~10%)    001~316

2분위 : (11~20%)    317~632

3분위 : (21~30%)    633~948

4분위 : (31~40%)    949~1264

5분위 : (41~50%)    1265~1580

6분위 : (51~60%)    1581~1895

7분위 : (61~70%)    1896~2211

8분위 : (71~80%)    2212~2527

9분위 : (81~90%)    2528~2843

10분위 : (91~100%)    2844~3160

 

조회방법

1. 고객별 주문 건수 파악하기

해석
고객별 주문 건수로 고객의 등급(분위)를 나누기 위해
group by 를 이용하여 고객으로 그룹화를 해준 후, count() 집계함수를 이용하여 주문건수를 파악해준다.
이때, 주문ID 가 중복인 데이터는 주문을 한번 한 것으로 간주되기 때문에 중복제거 distinct 를 해주어야 한다.
보기 편하도록 주문 건수는 O_cnt 라는 컬럼명을 부여한다!

 

 

2. 고객별 주문 건수에 대한 순위 산출하기 (중복순위 X, 순위 컬럼명 RNK)

해석
(1) 번의 내용이 필요하기 때문에 서브쿼리로 이용해준다.
중복 순위가 없는 순위 산출을 위하여 row_number() 함수를 이용한다.
고객별 주문 건수 ➜ O_cnt 로 순위를 산출하기 위해 order by O_cnt 를 해주고
높은 것이 1등이 되어야 하기 때문에 내림차순 즉, desc 를 해주어야한다.

 

 

3. 전체 고객 수 조회하기 (분위 산출을 위한 총 고객의 수를 알기 위해)

해석
고객이 중복이 있을 수는 없기 때문에 distinct 를 이용해 중복을 제거해주고
count() 집계함수를 이용하여 전체 고객의 수를 조회해준다.

결과 : 3159 명이 나오기 때문에 아까 위에서 말한 것 처럼 3160 명으로 간주하고
분위를 나누어 준다. !

 

 

4. (2) 번에서 산정한 순위를 토대로 10분위로 분류후 테이블화

테이블 명 : user_qt

해석
case when 문을 이용하여 10분위로 구분하고, 테이블화 해주기
이때, 우선 (2) 번의 내용이 필요하기 때문에 (2) 번의 내용을 서브쿼리로 이용해준다.

 

 

5. 고객의 등급 별 주문 건수의 합 조회

해석
등급 별로 구해주기 위해 group by 를 이용해 등급 (user_qt) 로 그룹화 해준다.
주문 건수의 합을 구하기 위해 합을 구해주는 sum() 집계함수를 이용하여 주문 건수의 합을 구한다.