oracle数据库,请教一个统计的sql语句

现有表结构
create table INFOS
(
ID VARCHAR2(30) not null,
NAME VARCHAR2(30),
CREATE_TIME DATE
)

数据
ID NAME CREATE_TIME
1 dot 2009/9/1 20:34:47
2 wins 2010/9/16 16:40:01
3 tks 2010/9/17 13:30:57

需要统计 CREATE_TIME 从2009年到2012年,每年的记录数量
要求没有年份的显示0,如下

year count
2009 1
2010 2
2011 0
2012 0

分不多,请帮忙,谢了

select v2.year, nvl(counts,0)

( select trunc(CREATE_TIME,'yyyy') year, count(*) counts
from infos
group by year ) v1,(select 2008+rownum year from dual connect rownum <=4) v2
where v1.year(+) = v2.year

select max(to_char(year,'yyyy')),count(*) from table_name group by to_char(year,'yyyy') where to_char(year,'yyyy') between 2010 to 2012;
没有的显示不了,你查询出来了,看下年份就知道了

可以给你一个提示。一般在写语句的时候,要查询一段时间内的信息都会用到between..and...就楼上说的你要把2011年的信息也查出来 ,但是数据库中并没有关于2011年的这条数据,所以不能显示出来。那么你就得想办法把年份在数据库中没有的也显示出来,在用oracle中的nvl函数去把年份作为判断条件,如果年份不存在,把create_time变成0。
[b]别人给你写好了语句,等到下回你遇到问题的时候还是不会,因为你没有形成自己动脑的习惯和思维[/b]