请问这个分组统计怎么做?
比如统计出来的结果需要是这样的省名称 市名称 次数
------------------------------------------
全国 0 100
------------------------------------------
辽宁省 0 10
------------------------------------------
辽宁省 沈阳市 5
------------------------------------------
辽宁省 铁岭市 3
------------------------------------------
辽宁省 大连市 2
------------------------------------------
河北省 0 20
------------------------------------------
河北省 石家庄市 10
....
-------------------------------------------------------------------------现在已经有一个统计结果可以用,这个统计结果是按照市统计的,类似于
省名称 市名称 次数
------------------------------------------
辽宁省 沈阳市 5
------------------------------------------
辽宁省 铁岭市 3
------------------------------------------
辽宁省 大连市 2
------------------------------------------
河北省 石家庄市 10
......
--------------------------------------------------------------------------怎么根据下面这个的统计结果,统计出上面的统计结果(全国包括省,省包括市)
比如统计出来的结果需要是这样的省名称 市名称 次数
------------------------------------------
全国 0 100
------------------------------------------
辽宁省 0 10
------------------------------------------
辽宁省 沈阳市 5
------------------------------------------
辽宁省 铁岭市 3
------------------------------------------
辽宁省 大连市 2
------------------------------------------
河北省 0 20
------------------------------------------
河北省 石家庄市 10
....
-------------------------------------------------------------------------现在已经有一个统计结果可以用,这个统计结果是按照市统计的,类似于
省名称 市名称 次数
------------------------------------------
辽宁省 沈阳市 5
------------------------------------------
辽宁省 铁岭市 3
------------------------------------------
辽宁省 大连市 2
------------------------------------------
河北省 石家庄市 10
......
--------------------------------------------------------------------------怎么根据下面这个的统计结果,统计出上面的统计结果(全国包括省,省包括市)
全国 0 100
辽宁省 0 10
辽宁省 沈阳市 5
辽宁省 铁岭市 3
辽宁省 大连市 2
河北省 0 20
河北省 石家庄市 10 */
with temp as
(
select '辽宁省' a ,'沈阳市' b, 5 c from dual
union all
select '辽宁省','铁岭市', 3 from dual
union all
select '辽宁省','大连市', 2 from dual
union all
select '河北省','石家庄市', 2 from dual
)
select a,b,c from temp
union all
select nvl(a,'全国'),'' ,sum(c) from temp group by rollup(a)
order by a,b--result:河北省 石家庄市 2
河北省 2
辽宁省 大连市 2
辽宁省 沈阳市 5
辽宁省 铁岭市 3
辽宁省 10
全国 12
decode(count(1),1,max(市),'0')市名称,
sum(次数)次数
from tt
group by grouping sets((rownum),(省),('1'))
with tt as
(
select '辽宁省' a ,'沈阳市' b, 5 c from dual
union all
select '辽宁省','铁岭市', 3 from dual
union all
select '辽宁省','大连市', 2 from dual
union all
select '河北省','石家庄市', 2 from dual
)
select decode(count(distinct a),1,max(a),'全国') 省名称,
decode(count(1),1,max(b),'0')市名称,
sum(c)次数
from tt
group by grouping sets((rownum),(a),('1'))
结果如下:
辽宁省 沈阳市 5
辽宁省 铁岭市 3
辽宁省 大连市 2
河北省 石家庄市 2
河北省 石家庄市 2
辽宁省 0 10
全国 0 12
排序有问题哦
-- 加一下order by a 就可以了!
(
select '辽宁省' a,'沈阳市' b,5 c from dual
union all
select '辽宁省' a,'铁岭市' b,3 c from dual
union all
select '辽宁省' a,'大连市' b,2 c from dual
union all
select '河北省' a,'石家庄市' b,2 c from dual
union all
select '河北省' a,'秦皇岛市' b,3 c from dual
)
select nvl(a,'全国') a,b,c from (
select a,b,sum(c) c from temp where a is not null group by cube(a,b)
) t where t.a is not null or (t.a is null and t.b is null)
(
select '辽宁省' a,'沈阳市' b,5 c from dual
union all
select '辽宁省' a,'铁岭市' b,3 c from dual
union all
select '辽宁省' a,'大连市' b,2 c from dual
union all
select '河北省' a,'石家庄市' b,2 c from dual
union all
select '河北省' a,'秦皇岛市' b,3 c from dual
)
select nvl(a,'全国') a,b,c from (
select a,b,sum(c) c from temp where a is not null group by cube(a,b) order by a desc
) t where t.a is not null or (t.a is null and t.b is null) 结果如下:
1 全国 15
2 辽宁省 大连市 2
3 辽宁省 沈阳市 5
4 辽宁省 铁岭市 3
5 辽宁省 10
6 河北省 秦皇岛市 3
7 河北省 石家庄市 2
8 河北省 5