안녕하세요.
지난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 |
많은조언 부탁드립니다(__)
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 ;