DB관련/MySQL

[MySQL] 주별(주간) / 요일별 판매량 리포트 MySQL 쿼리 예제 (Weekly Report / Day of week Report)

saltdoll 2020. 11. 17. 04:24
반응형

판매 리포트(Sales Report) 프로그램을 작업에서 

시간/기간별 기준은 리포트의 요소중에 중요한 요소로 차지합니다.

가계 주인은 주별로 판매 리포트를  통해서, 월의 초반 중반 후반의 판매량을 알고 싶어하고,

그리고, 요일별로 판매량을 알아서 제품을 요일별 준비량을 미리 알 수 있는 토대로 이용하게 됩니다.


MySQL에서 함수들인 DAYOFWEEK()와 WEEK(), YEARWEEK() 함수를 통해서,

요일별, 주간별 리포트 쿼리를 만들 수 있습니다.

아래는 요일별, 주간별 리포트를 위한 MySQL쿼리 예제들입니다.

해당 예제를 통해서, 형식에 맞게 수정해서 사용하면 쉽게 리포트 작성을 할 수 있습니다.



(Case 1) Day of week (월요일~일요일) 요일별 판매량

요일별 판매량 보고서는 특정 기간동안 Sun에서 Sat 요일별 판매량를 리포팅 해줍니다.


group by dayofweek()를 이용한 요일별 리포트

SELECT
  CASE DAYOFWEEK(reg_date)
    WHEN 1 THEN "Sun"
    WHEN 2 THEN "Mon"
    WHEN 3 THEN "Tue"
    WHEN 4 THEN "Wed"
    WHEN 5 THEN "Thu"
    WHEN 6 THEN "Fri"
    WHEN 7 THEN "Sat"
  END AS DateRange
,count(user_id) AS Total
FROM DailyCount 
WHERE date_format(reg_date,"%Y%m%d") BETWEEN "20181101" AND "20181116"
GROUP BY DAYOFWEEK(reg_date)



(Case 2) Weekly 주별 판매량 (52주 기준)

주별로 판매량은 1년을 52주를 기준으로도 볼 수 있는 리포팅으로 사용도 가능합니다.


(Case2) Weekly 리포트의 쿼리 예제 1

group by YEAR()와 WEEK()를 이용한 주별 기준 통계

SELECT

 CONCAT(YEAR(reg_date),"/",Week(reg_date)) YYYYWeek

,CONCAT(DATE_FORMAT(DATE_ADD(reg_date, INTERVAL(1-DAYOFWEEK(reg_date)) DAY),"%m/%d/%Y"),

" -  "

,DATE_FORMAT(DATE_ADD(reg_date, INTERVAL(7-DAYOFWEEK(reg_date)) DAY),"%m/%d/%Y")) AS DateRange

,count(user_id) AS Total

FROM DailyCount

WHERE date_format(reg_date,"%Y%m%d") BETWEEN "20201101" AND "20201105"

GROUP BY CONCAT(YEAR(reg_date), "/", WEEK(reg_date))


(Case2) Weekly 리포트의 쿼리 예제 2

group by YEARWEEK(reg_date)를 이용한 주별 기준 통계로 그룹핑합니다.

SELECT
  WEEK(reg_date) AS week,
  SUM(left_cnt) AS lct,
  SUM(right_cnt) AS rct,
  CONCAT(
    DATE_FORMAT(DATE_ADD(dtentered, INTERVAL(1-DAYOFWEEK(reg_date)) DAY),'%Y-%m-%e'),
    ' TO ',   
    DATE_FORMAT(DATE_ADD(dtentered, INTERVAL(7-DAYOFWEEK(reg_date)) DAY),'%Y-%m-%e')
  ) AS DateRange
FROM `DailyCount`
WHERE paid='1' and regid='SF00033200712'
GROUP BY YEARWEEK(reg_date)

예제 2 결과

| WEEK | LCT | RCT |                DATERANGE |
-----------------------------------------------
|   19 |   7 |   4 | 2013-05-12 TO 2013-05-18 |
|   20 |   1 |   0 | 2013-05-19 TO 2013-05-25 |

참고: 

https://stackoverflow.com/questions/16558155/select-query-from-sql-group-by-weekly-reports


[Weekly Report예제]





반응형