table 
ID  回帖用户    回帖时间
1   aaaaaa    2010-5-15 10:20:20
2   bbbbbb    2010-5-16 10:20:20
3   cccccc    2010-5-17 10:20:20
4   dddddd    2010-5-18 10:20:20
5   aaaaaa    2010-5-18 19:29:55
6   aaaaaa    2010-5-18 20:33:42回帖时间DATE类型
——————————————————————————————现在需要用一条SQL语句统计出 2010年5月份 回帖总数 以及 回帖用户数。条件只给出年份以及月份,都是INT类型的,请问保证效率的情况下SQL语句如何写!

解决方案 »

  1.   

    with temp as(
    select 1 id,'aaaaaa' userid,to_date('2010-5-15 10:20:20','yyyy-mm-dd hh24:mi:ss') retime from dual
    union all
    select 2 id,'bbbbbb' userid,to_date('2010-5-16 10:20:20','yyyy-mm-dd hh24:mi:ss') retime from dual
    union all
    select 3 id,'cccccc' userid,to_date('2010-5-17 10:20:20','yyyy-mm-dd hh24:mi:ss') retime from dual
    union all
    select 4 id,'dddddd' userid,to_date('2010-5-18 10:20:20','yyyy-mm-dd hh24:mi:ss') retime from dual
    union all
    select 5 id,'aaaaaa' userid,to_date('2010-5-18 19:29:55','yyyy-mm-dd hh24:mi:ss') retime from dual
    union all
    select 6 id,'aaaaaa' userid,to_date('2010-5-18 20:33:42','yyyy-mm-dd hh24:mi:ss') retime from dual
    )
    select count(id) 回帖总数,count(distinct userid) 回帖用户数 from  temp where to_char(retime,'yyyy-mm')='2010-05'
      

  2.   


    select to_char(回帖时间,'yyyy-mm') 月份,count(1) 每月回帖总数,
    count(distinct 回帖用户) 回帖用户数
    from tb
    --加个where to_char(回帖时间,'yyyy-mm')='2010-05' 就是5月的,不加则是每个月的
    group by to_char(回帖时间,'yyyy-mm')
      

  3.   

    回帖时间DATE类型
    ——————————————————————————————现在需要用一条SQL语句统计出 2010年5月份 回帖总数 以及 回帖用户数。条件只给出年份以及月份,都是INT类型的,请问保证效率的情况下SQL语句如何写!
    //select count(id) 回帖总数,count(distinct userid) 回帖用户数 from  temp where to_char(retime,'yyyy-mm')='2010-05'
    根据楼主说的,主要是看重sql效率,条件是整型也没事,就用这个sql可以了。如果觉得效率还是低了,可以写成:
    select /*+parallel(a,20)*/count(id) 回帖总数,count(distinct userid) 回帖用户数 from  temp a where to_char(retime,'yyyy-mm')='2010-05'
      

  4.   

    写你自己的sql的时候不需要with那段,只要把from后的表替换成你自己的表就可以了。