表       rydjbxx
字段  bh--人员编号(主键)           rzf_xzdm--人员所在地行政区划(12位)
    faab45cd23     110102002356表 regioncode代码表
字段 cd_id      cd_name
110000000000    北京市
430000000000    湖南省
430525000000    邵阳市
430525102000    洞口县rydjbxx rzf_xzdm 与regioncode的cd_id是相关联的
说明:
    rydjbxx是一张人员的基本信息登记表,有100来列,大概有700多万条数据,
rzf_xzdm是一个城市的行政区划代码,前两位代表省或直辖市,假设北京110000000000,前6位代表市比如湖南邵阳430525000000(即市级的后6位全是0),前9位精确到县,430525102000湖南邵阳邵东县(县级的后3位是0)现要做个这样的统计,按县来统计每个县有多少人(count(bh)),统计完一个县之后汇总下统计出该市总共多少人,例如:
邵东县  500236
隆回县  4251369
洞口县   4578646
.
.
.
邵阳市  787994200
长沙县  784756
望城县    4578787
长沙市   4545465
大概就是实现一个这样的统计,想请教各位大侠怎么在统计每个县(group by substr(rzf_xzdm,1,9))之后汇总这个市的人数
一条sql语句。
另外我想问下:这样的一个查询(只按县统计)耗时2分多钟算正常的嘛?

解决方案 »

  1.   

    人员表            
    select count(bh)over(partition by substr(rzf_xzdm,1,9))--县,count(bh)over(partition by substr(rzf_xzdm,1,6))--市 from rydjbxx
      

  2.   

    这个是否满足要求?  1  with t as(
      2   select 1 id,'430525102000' cid from dual
      3   union all
      4   select 2,'430525102000' from dual
      5   union all
      6   select 3,'430525103000' from dual
      7   union all
      8   select 4,'430525104000' from dual
      9   union all
     10   select 5,'430525103000' from dual
     11  ),
     12  a as(
     13   select '430525000000' cid,'邵阳市' cname from dual
     14   union all
     15   select '430525102000','洞口县' from dual
     16   union all
     17   select '430525103000','邵东县' from dual
     18   union all
     19   select '430525104000','隆回县' from dual
     20  )
     21  select cname, cnt
     22  from (select
     23  nvl(substr(t.cid,1,6),substr(t.cid,1,9)) cid,
     24  count(*) cnt
     25  from t
     26  group by grouping sets (substr(cid,1,6),substr(cid,1,9))
     27  ) c, a
     28* where c.cid=rtrim(a.cid,'0')
    SQL> /CNAME            CNT
    --------- ----------
    邵阳市             5
    邵东县             2
    洞口县             2
    隆回县             1
      

  3.   


    --应该用rollup和cube函数可以实现吧试下:
    GROUP BY CUBE(substr(rzf_xzdm,1,9),substr(rzf_xzdm,1,6))
      

  4.   

    --上面写法换一下:
    GROUP BY cube(substr(rzf_xzdm,1,6)),substr(rzf_xzdm,1,9))
      

  5.   

    晕~~~GROUP BY cube(substr(rzf_xzdm,1,6),substr(rzf_xzdm,1,9))
      

  6.   


    首先,谢谢大家这么快的回复,长了见识了,好多没见过的函数啊逍遥游给的答案是能满足我的需求我试验下另外还是想请教大家,统计这样的数据2分多钟算正常不,数据库的服务器是IBM的小型服务器