Home Sql order 데이터 분석
Post
Cancel

Sql order 데이터 분석

SQL ORDER 데이터 분석

최신 날짜 데이터 확인하기

1
2
3
4
SELECT *
FROM orders
ORDER BY order_date DESC
LIMIT 100;

데이터가 많아 로딩하는게 시간이 많이 소요되어 limit로 제한을 두었다.

데이터는 25.06월까지 존재한다.

6 ~ 8월 데이터를 확인하기 위해 2024년의 데이터를 가지고 진행했다.




24년 06~08월 월별 구매 건수

  • DATE_FORMAT(날짜 , 형식) : 날짜를 지정한 형식으로 출력
1
2
3
4
5
SELECT DATE_FORMAT(order_date, '%Y-%m') date, COUNT(order_id) count
FROM orders
WHERE order_date BETWEEN '2024-06-01' AND '2024-08-31'
GROUP BY DATE_FORMAT(order_date, '%Y-%m') 
;

| date | count | | :—: | :—: | | 2024-06 | 10462 | | 2024-07 | 9163 | | 2024-08 | 12531 |

8월에 구매건수가 상승했다.

*year(order_date)=2024 AND MONTH(order_date)>=06 AND MONTH(order_date)<=08




24년 06~08월 데이터 중 가장 많은 금액을 지불한 고객 TOP 3

*소수점 없이 출력

상위 고객의 결제 금액에 전체 매출에 영향을 미칠 수 있다.

1
2
3
4
5
6
SELECT member_id, FORMAT(MAX(order_price), 0)
FROM orders
WHERE year(order_date)=2024 AND MONTH(order_date)>=06 AND MONTH(order_date)<=08 AND member_id !=''
GROUP BY member_id
LIMIT 3
;
member_idFORMAT(MAX(order_price), 0)
1231,690,420
4561,083,520
789892,350

가장 비싼 주문 1건을 조회했다.

가장 많이 지불한 고객을 보기 위해선 SUM(order_price)을 사용해야할듯 하다.




24년 06~08월 데이터 중 가장 많이 구매한 고객 TOP 3

충성 고객 식별

1
2
3
4
5
6
7
SELECT member_id, COUNT(order_id)
FROM orders
WHERE order_date BETWEEN '2024-06-01' AND '2024-08-31 23:59:59' AND member_id !=''
GROUP BY member_id
ORDER BY COUNT(order_id) DESC
LIMIT 3
;
member_idCOUNT(order_id)
5959542
9876525
8282117

고액 결제 고객과 구매 횟수 상위 고객이 일치하지 않을 수 있다.

구매 횟수 상위 고객을 중심으로 재구매 유도를 할 수 있다.



*between A and B 는 A 이상 B 이하

하지만 날짜 데이터를 다루는 경우 시분초 데이터까지 생각해야한다.

시분초 없이 날짜만 이용한다면 00시 00분 00초로 자동으로 인식한다.


  • between A and B : 0.063 초

  • year, month 쓰는 경우 : 0.078 초

    • year(order_date)=2024 AND MONTH(order_date)>=06 AND MONTH(order_date)<=08

BETWEEN을 활용하는게 시간이 더 적게 소요되어 이후에 BETWEEN으로 작성했다.




24년 06~08월 월별 구매건수와 구매액

1
2
3
4
5
6
SELECT DATE_FORMAT(order_date, '%y - %m') date, COUNT(order_id) count, 
FORMAT(SUM(order_price), 0) total_price
FROM orders
WHERE order_date BETWEEN '2024-06-01' and '2024-08-31:23:59:59'
GROUP BY DATE_FORMAT(order_date, '%y - %m')
;
datecounttotal_price
24 - 0610462786,543,210
24 - 079163876,543,210
24 - 0812531987,654,320
  • 6월은 구매건수는 7월보다 많지만 구매액은 적었는데 해당 시기에 할인 이벤트가 있었을 수 있다.

    → 상품군별 분석

  • 7월은 구매건수는 감소했지만 평균 구매액이 상승했는데 소수의 고액 구매자가 영향을 준 것으로 보여진다.

    → 고액 결제 고객 분석

  • 8월의 구매건수와 구매액이 모두 증가했다.




24년 6월과 25년 6월 데이터 구매건수 및 구매액 비교

동일 시기의 전년 대비 성과 비교

1
2
3
4
5
6
SELECT DATE_FORMAT(order_date, '%y - %m') date, COUNT(order_id) count, 
FORMAT(SUM(order_price), 0) total_price 
FROM orders
WHERE (year(order_date)=2024 AND MONTH(order_date)=06) OR (year(order_date)=2025 AND MONTH(order_date)=06)
GROUP BY DATE_FORMAT(order_date, '%y - %m')
;
datecounttotal_price
24 - 0610462786,543,210
25 - 068521762,482,320

24년 6월에 비해 25년의 6월 주문량과 구매액이 적은 것을 알 수 있다.

25년 6월은 전년 동월 대비 주문량 19% 감소, 매출 3% 감소했다.

프로모션, 경제 상황 등 파악 필요






주문 사이트 별 총 구매 가격

각 판매 채널의 매출 규모 파악

1
2
3
4
5
6
7
SELECT order_site_id, SUM(order_price) price
FROM orders 
JOIN orderitems
USING (order_id)
GROUP BY order_site_id 
ORDER BY price DESC
;
order_site_idprice
homepage123,456,789,250
mobile100,000,000,690
google85,156,753,710
naver82,456,750,390
coupang75,412,689,580
kakao71,498,273,190
daum59,268,152,170

홈페이지 구매액이 가장 높다.

채널별 고객 특성 분석을 통해 마케팅 효율 최적화를 진행할 수 있을 것 같다.






REFERENCE

This post is licensed under CC BY 4.0 by the author.