当前位置: 代码迷 >> SQL >> Oracle-按各种时间分组统计的sql
  详细解决方案

Oracle-按各种时间分组统计的sql

热度:23   发布时间:2016-05-05 13:56:01.0
Oracle---按各种时间分组统计的sql

如下表table1:

日期(exportDate) ????????????? 数量(amount)
--------------?????? ? ? ? ? ? ?? -----------

14-2月 -08?????????????????????? 20
10-3月 -08?????????????????????? 2
14-4月 -08?? ? ? ? ? ? ? ? ? ? ? 6
14-6月 -08?????????????????????? 75
24-10月-09????????????????????? 23
14-11月-09????????????????????? 45
04-8月 -10?????????????????????? 5
04-9月 -10?????????????????????? 44
04-10月-10????????????????????? 88


注意:为了显示更直观,如下查询已皆按相应分组排序

1.按年份分组

select to_char(exportDate,'yyyy'),sum(amount) from table1 group by to_char(exportDate,'yyyy')

order by to_char(exportDate,'yyyy');

年份????? 数量

-----------------------------
2008??? 103

2009??? 68
2010??? 137

?

2.按月份分组

select to_char(exportDate,'yyyy-mm'),sum(amount) from table1 group by to_char(exportDate,'yyyy-mm')

order by to_char(exportDate,'yyyy-mm');

月份?????????? 数量

-----------------------------

2008-02??? 20
2008-03??? 2
2008-04??? 6
2008-06??? 75
2009-10??? 23
2009-11??? 45
2010-08??? 5
2010-09??? 44
2010-10??? 88

?

3.按季度分组

select to_char(exportDate,'yyyy-Q'),sum(amount) from table1 group by to_char(exportDate,'yyyy-Q')

order by to_char(exportDate,'yyyy-Q');

季度????????? 数量

------------------------------

2008-1?? ?22
2008-2?? ?81
2009-4?? ?68
2010-3?? ?49
2010-4?? ?88

?

4.按周分组

select to_char(exportDate,'yyyy-IW'),sum(amount) from table1 group by to_char(exportDate,'yyyy-IW')

order by to_char(exportDate,'yyyy-IW');

周???????????? 数量

------------------------------

2008-07?? ?20
2008-11?? ?2
2008-16?? ?6
2008-24?? ?75
2009-43?? ?23
2009-46?? ?45
2010-31?? ?5
2010-35?? ?44
2010-40?? ?88

?

补充

按季度分组还有个比较笨的方法(参考网络资源)

select? to_char(exportDate,'yyyy'),
sum(decode(to_char(exportDate,'mm'),'01',amount,'02',amount,'03',amount,0)) as 第一季,
sum(decode(to_char(exportDate,'mm'),'04',amount,'05',amount,'06',amount,0)) as 第二季,
sum(decode(to_char(exportDate,'mm'),'07',amount,'08',amount,'09',amount,0)) as 第三季,
sum(decode(to_char(exportDate,'mm'),'10',amount,'11',amount,'12',amount,0)) as 第四季

from table1

group by to_char(exportDate,'yyyy');

年份??????? 第一季???? 第二季???? 第三季???? 第四季

--------------------------------------------------

2009???????? 0??????????? 0??????????? 0????????? 68
2010???????? 0??????????? 0??????????? 49??????? 88
2008???????? 22????????? 81????????? 0????????? 0

?

?

?

?

?

  相关解决方案