使用mysql实现1-12月份查询统计

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/W3Chhhhhh/article/details/54097890

在数据中我们应该如何实现1-12月份统计的查询,今天一个哥们一起探讨这个问题,我想出来了一个方法,但是不便统计,同学使用的oracle,用oracle实现了一种查询。

实现的效果如下:

首先说下我的sql方式:

-- 创建表测试
create table lesson(
	id int auto_increment primary key,
	stuName varchar(60),
	time datetime
);

创建完成后添加数据测试

查询的sql如下:

select t.myYear as 年份,t.monthNo as 月份,count(1) as 数量统计
from(select month(lesson.time) as monthNo,
         year(lesson.time) as myYear,
     lesson.id as id
 from lesson) as t
where t.myYear='2016'
group by t.monthNo;

结果如下:

同学使用的是oracle:大致思路是写12个sum(decode(to_char(lesson.time,'mm'),'01',1,0)),然后实现查询,最终能够实现每个月多少数据量,方便查询。

我考虑了一会儿,模仿他的方式用mysql实现了这样的查询,虽然简单,但是确实能够解决实际问题:

-- 统计方法二
select 
sum(case month(lesson.time) when '1' then 1 else 0 end) as 一月份,
sum(case month(lesson.time) when '2' then 1 else 0 end) as 二月份,
sum(case month(lesson.time) when '3' then 1 else 0 end) as 三月份,
sum(case month(lesson.time) when '4' then 1 else 0 end) as 四月份,
sum(case month(lesson.time) when '5' then 1 else 0 end) as 五月份,
sum(case month(lesson.time) when '6' then 1 else 0 end) as 六月份,
sum(case month(lesson.time) when '7' then 1 else 0 end) as 七月份,
sum(case month(lesson.time) when '8' then 1 else 0 end) as 八月份,
sum(case month(lesson.time) when '9' then 1 else 0 end) as 九月份,
sum(case month(lesson.time) when '10' then 1 else 0 end) as 十月份,
sum(case month(lesson.time) when '11' then 1 else 0 end) as 十一月份,
sum(case month(lesson.time) when '12' then 1 else 0 end) as 十二月份
from lesson
where year(lesson.time)='2016';

最后运行的结果为:

好了,以上就是整体的思路,如果你还有更好的想法,请留言~

展开阅读全文

没有更多推荐了,返回首页