背景
中小项目(非大数据项目)中总是有统计报表模块,其中每次都有对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');