Mysql一年12个月数据统计查询,没数据补0

背景

中小项目(非大数据项目)中总是有统计报表模块,其中每次都有对12个月数据统计的需求,特别留作记录

实战

这个实例是统计每个月用户注册总量

如果数据表中create_time为datetime格式

select 
sum(case month(create_time) when '1' then 1 else 0 end) as 一月,
sum(case month(create_time) when '2' then 1 else 0 end) as 二月,
sum(case month(create_time) when '3' then 1 else 0 end) as 三月,
sum(case month(create_time) when '4' then 1 else 0 end) as 四月,
sum(case month(create_time) when '5' then 1 else 0 end) as 五月,
sum(case month(create_time) when '6' then 1 else 0 end) as 六月,
sum(case month(create_time) when '7' then 1 else 0 end) as 七月,
sum(case month(create_time) when '8' then 1 else 0 end) as 八月,
sum(case month(create_time) when '9' then 1 else 0 end) as 九月,
sum(case month(create_time) when '10' then 1 else 0 end) as 十月,
sum(case month(create_time) when '11' then 1 else 0 end) as 十一月,
sum(case month(create_time) when '12' then 1 else 0 end) as 十二月
from tbl_user
where year(create_time) in ('2018');

如果数据表中create_time为时间戳,需要进行时间戳转换

select 
sum(case month(FROM_UNIXTIME(create_time, '%Y-%m-%d %H:%i:%S')) when '1' then 1 else 0 end) as 一月,
sum(case month(FROM_UNIXTIME(create_time, '%Y-%m-%d %H:%i:%S')) when '2' then 1 else 0 end) as 二月,
sum(case month(FROM_UNIXTIME(create_time, '%Y-%m-%d %H:%i:%S')) when '3' then 1 else 0 end) as 三月,
sum(case month(FROM_UNIXTIME(create_time, '%Y-%m-%d %H:%i:%S')) when '4' then 1 else 0 end) as 四月,
sum(case month(FROM_UNIXTIME(create_time, '%Y-%m-%d %H:%i:%S')) when '5' then 1 else 0 end) as 五月,
sum(case month(FROM_UNIXTIME(create_time, '%Y-%m-%d %H:%i:%S')) when '6' then 1 else 0 end) as 六月,
sum(case month(FROM_UNIXTIME(create_time, '%Y-%m-%d %H:%i:%S')) when '7' then 1 else 0 end) as 七月,
sum(case month(FROM_UNIXTIME(create_time, '%Y-%m-%d %H:%i:%S')) when '8' then 1 else 0 end) as 八月,
sum(case month(FROM_UNIXTIME(create_time, '%Y-%m-%d %H:%i:%S')) when '9' then 1 else 0 end) as 九月,
sum(case month(FROM_UNIXTIME(create_time, '%Y-%m-%d %H:%i:%S')) when '10' then 1 else 0 end) as 十月,
sum(case month(FROM_UNIXTIME(create_time, '%Y-%m-%d %H:%i:%S')) when '11' then 1 else 0 end) as 十一月,
sum(case month(FROM_UNIXTIME(create_time, '%Y-%m-%d %H:%i:%S')) when '12' then 1 else 0 end) as 十二月
from tbl_user
where year(FROM_UNIXTIME(create_time, '%Y-%m-%d %H:%i:%S')) in ('2018');

You May Also Like

About the Author: 一块自由的砖

码农一个,一块自由勤恳的砖,哪里需要哪里搬!( ̄▽ ̄)"