1. 程式人生 > >使用mysql實現1-12月份查詢統計

使用mysql實現1-12月份查詢統計

在資料中我們應該如何實現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';

最後執行的結果為:

好了,以上就是整體的思路,如果你還有更好的想法,請留言~