[SQL] 의 판매와 달을 포함하여 지난 12 개월의 MySQL의 월간 판매
SQL의 판매와 달을 포함하여 지난 12 개월의 MySQL의 월간 판매
SELECT DATE_FORMAT(date, "%b") AS month, SUM(total_price) as total
FROM cart
WHERE date <= NOW()
and date >= Date_add(Now(),interval - 12 month)
GROUP BY DATE_FORMAT(date, "%m-%Y")
단지 기존의 달 결과를 표시이 쿼리. 나는 모든 12 개 개월 판매를해야합니다.
산출:
"month" "total"
--------------
"Jun" "22"
"Aug" "30"
"Oct" "19"
"Nov" "123"
"Dec" "410"
필수 출력 :
"month" "total"
--------------
"Jan" "0"
"Feb" "0"
"Mar" "0"
"Apr" "0"
"May" "0"
"Jun" "22"
"Jul" "0"
"Aug" "30"
"Sep" "0"
"Oct" "19"
"Nov" "123"
"Dec" "410"
해결법
-
==============================
1.다음 표를 고려
다음 표를 고려
mysql> select * from cart ; +------+------------+-------------+ | id | date | total_price | +------+------------+-------------+ | 1 | 2014-01-01 | 10 | | 2 | 2014-01-20 | 20 | | 3 | 2014-02-03 | 30 | | 4 | 2014-02-28 | 40 | | 5 | 2014-06-01 | 50 | | 6 | 2014-06-13 | 24 | | 7 | 2014-12-12 | 45 | | 8 | 2014-12-18 | 10 | +------+------------+-------------+
이제 논리에 따라 당신은 일년 다시 찾고 및 전기 십이 2013 2014년 12월 즉 결과에 두 번 표시되며 우리가 그들에 대해 별도의 계산이 필요하면 우리가 생성 동적 날짜 범위 MySQL을 단일의 다음과 같은 기술을 사용할 수 있습니다로 표는 지난 7 일을 선택하고 빈 행을 포함
t1.month, t1.md, coalesce(SUM(t1.amount+t2.amount), 0) AS total from ( select DATE_FORMAT(a.Date,"%b") as month, DATE_FORMAT(a.Date, "%m-%Y") as md, '0' as amount from ( select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY as Date from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c ) a where a.Date <= NOW() and a.Date >= Date_add(Now(),interval - 12 month) group by md )t1 left join ( SELECT DATE_FORMAT(date, "%b") AS month, SUM(total_price) as amount ,DATE_FORMAT(date, "%m-%Y") as md FROM cart where Date <= NOW() and Date >= Date_add(Now(),interval - 12 month) GROUP BY md )t2 on t2.md = t1.md group by t1.md order by t1.md ;
출력 될 것입니다
+-------+---------+-------+ | month | md | total | +-------+---------+-------+ | Jan | 01-2014 | 30 | | Feb | 02-2014 | 70 | | Mar | 03-2014 | 0 | | Apr | 04-2014 | 0 | | May | 05-2014 | 0 | | Jun | 06-2014 | 74 | | Jul | 07-2014 | 0 | | Aug | 08-2014 | 0 | | Sep | 09-2014 | 0 | | Oct | 10-2014 | 0 | | Nov | 11-2014 | 0 | | Dec | 12-2013 | 0 | | Dec | 12-2014 | 55 | +-------+---------+-------+ 13 rows in set (0.00 sec)
그리고 당신은 위의 경우에 대해 2,013 즉 12월 2014 년 십이 상관하지 않는 경우
그럼 그냥 동적 날짜 부분에 의해 그룹을 변경
where a.Date <= NOW() and a.Date >= Date_add(Now(),interval - 12 month) group by month
및 t1.month하여 같은 그룹의 최종 그룹
-
==============================
2.@pankaj 힌트 주셔서 감사합니다, 여기에 내가이 쿼리를 통해 해결 ...
@pankaj 힌트 주셔서 감사합니다, 여기에 내가이 쿼리를 통해 해결 ...
SELECT SUM(IF(month = 'Jan', total, 0)) AS 'Jan', SUM(IF(month = 'Feb', total, 0)) AS 'Feb', SUM(IF(month = 'Mar', total, 0)) AS 'Mar', SUM(IF(month = 'Apr', total, 0)) AS 'Apr', SUM(IF(month = 'May', total, 0)) AS 'May', SUM(IF(month = 'Jun', total, 0)) AS 'Jun', SUM(IF(month = 'Jul', total, 0)) AS 'Jul', SUM(IF(month = 'Aug', total, 0)) AS 'Aug', SUM(IF(month = 'Sep', total, 0)) AS 'Sep', SUM(IF(month = 'Oct', total, 0)) AS 'Oct', SUM(IF(month = 'Nov', total, 0)) AS 'Nov', SUM(IF(month = 'Dec', total, 0)) AS 'Dec', SUM(total) AS total_yearly FROM ( SELECT DATE_FORMAT(date, "%b") AS month, SUM(total_price) as total FROM cart WHERE date <= NOW() and date >= Date_add(Now(),interval - 12 month) GROUP BY DATE_FORMAT(date, "%m-%Y")) as sub
from https://stackoverflow.com/questions/27600863/mysql-monthly-sale-of-last-12-months-including-months-with-no-sale by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 와 DELETE SQL은 것은 WHERE 조건에 대한 다른 테이블 가입 (0) | 2020.04.20 |
---|---|
[SQL] 식별 컬 테이블을 만드는 방법 (0) | 2020.04.20 |
[SQL] 열 너무 긴 1406 데이터 - MySQL의 오류 코드 (0) | 2020.04.20 |
[SQL] sqlite3를에 대한 기본 재귀 쿼리? (0) | 2020.04.20 |
[SQL] SQL 서버에서 가장 가까운 날짜 찾기 (0) | 2020.04.19 |