domica0
domica0
2010-10-13 19:17

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

分不多,请帮忙,谢了

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • rabbitbug rabbitbug 11年前

    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

    点赞 评论 复制链接分享
  • zgy52188 zgy52188 11年前

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

    点赞 评论 复制链接分享
  • dragona dragona 11年前

    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;
    没有的显示不了,你查询出来了,看下年份就知道了

    点赞 评论 复制链接分享

相关推荐