表 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分多钟算正常的嘛?
字段 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分多钟算正常的嘛?
select count(bh)over(partition by substr(rzf_xzdm,1,9))--县,count(bh)over(partition by substr(rzf_xzdm,1,6))--市 from rydjbxx
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
--应该用rollup和cube函数可以实现吧试下:
GROUP BY CUBE(substr(rzf_xzdm,1,9),substr(rzf_xzdm,1,6))
GROUP BY cube(substr(rzf_xzdm,1,6)),substr(rzf_xzdm,1,9))
首先,谢谢大家这么快的回复,长了见识了,好多没见过的函数啊逍遥游给的答案是能满足我的需求我试验下另外还是想请教大家,统计这样的数据2分多钟算正常不,数据库的服务器是IBM的小型服务器