MySQL 3개월, 1년통계 구하는법 문의드립니다. 0 5 2,626

by MLB [MySQL] [2017.10.27 11:15:08]


안녕하세요.

지난3개월, 지난1년 통계 구하는 쿼리 문의드립니다.

현재 테이블 구조는 아래와 같습니다.

품목 국가 물량 금액
2017 1 1 100 200 12345 234564
2017 1 2 120 250 34534 1231233

 

화면에 보여주는 최종 데이터는 아래의 쿼리를 통해 년월별 품목,국가에 해당하는 데이터를 보여주려고 하는데

여기에 해당 년,월,품목,국가에 해당하는 직전3개월, 직전1년에 대한 물량의 합산 금액을 같이 표현해주고 싶습니다.

SELECT
    YEAR,
    MONTH,
    PRODUCT,
    COUNTRY,
    SUM(WEIGHT) WEIGHT,
    SUM(AMOUNT) AMOUNT
FROM
    TEST
GROUP BY YEAR, MONTH, PRODUCT, COUNTRY

 

최종적으로 원하는 화면 데이터 결과는 아래와 같습니다.

품목 국가 물량 금액 3개월평균(물량) 1년평균(물량)
2017 1 100 200 1234 12345    
2017 2 100 200 3455 34633    

많은조언 부탁드립니다(__)

by 마농 [2017.10.27 11:40:08]

실제 컬럼이 년,월,일 로 나뉘어 있나요?
혹시 하나로 묶여 있는 날짜 항목은 없나요?
년,월,일 로 나뉘어 있으면 범위 조건 줄 때 많이 곤란한데요.


by MLB [2017.10.27 12:53:44]

네 실제 컬럼이 년,월,일로 나뉘어져 있습니다 ㅜㅜ

혹시 구할수 있는 방법이 없을까요? ㅜㅜ


by 마농 [2017.10.27 13:38:07]
SELECT a.year
     , a.month
     , a.product
     , a.country
     , a.weight
     , a.amount
     , AVG(CASE WHEN b.ym >= a.ym2 THEN b.weight END) avg_3month
     , AVG(b.weight) avg_1year
  FROM (SELECT year, month, product, country
             , DATE_ADD(CONCAT(year, '-', month, '-', 1), interval -11 month) ym1
             , DATE_ADD(CONCAT(year, '-', month, '-', 1), interval  -2 month) ym2
             , DATE_ADD(CONCAT(year, '-', month, '-', 1), interval   0 month) ym
             , SUM(weight) weight
             , SUM(amount) amount
          FROM test
         GROUP BY year, month, product, country
        ) a
     , (SELECT year, month, product, country
             , DATE_ADD(CONCAT(year, '-', month, '-', 1), interval   0 month) ym
             , SUM(weight) weight
             , SUM(amount) amount
          FROM test
         GROUP BY year, month, product, country
        ) b
 WHERE a.product = b.product
   AND a.country = b.country
   AND b.ym BETWEEN a.ym1 AND a.ym
 GROUP BY a.year, a.month, a.product, a.country, a.weight, a.amount
;

 


by MLB [2017.10.27 13:52:13]

답변 감사드립니다. 마농님 (__)

마농님 덕분에 잘해결했습니다.

좋은 하루 되세요.^^


by 마농 [2017.10.27 14:17:23]

현재월 포함 3개월로 계산 했습니다. 현재월 제외 3개월이라면?
  - 숫자를 바꾸세요. (-11, -2, 0) --> (-12, -3, -1)
  - 조인도 바꾸세요. (이너조인) --> (아우터 조인)

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입