建立测试环境如下
create table t1
(f1 varchar2(10),
f2 varchar2(10),
v1 integer,
v2 integer);
--插入测试数据
insert into t1
select '北京','1',1,1 from dual
union all
select '北京','2',1,1 from dual
union all
select '北京','1',1,1 from dual
union all
select '北京','2',1,1 from dual
union all
select '上海','1',1,1 from dual
union all
select '上海','',1,1 from dual;
commit;
--取得汇总数据
select f1,f2,sum(v1),sum(v2)
from t1
group by rollup(f1,f2);
-----------------------------
1 北京 01 2 2
2 北京 02 2 2
3 北京 4 4
4 上海 01 1 1
5 上海 02 1 1
6 上海 2 2
7 6 6
------------------------------------
我现在想让结果按照“v1的汇总小计”排序,就是希望得到的结果为
4 上海 01 1 1
5 上海 02 1 1
6 上海 2 2 --按照这个结果值排序
1 北京 01 2 2
2 北京 02 2 2
3 北京 4 4 --按照这个结果值排序
-------------------------------------
既然需要按照汇总数据排序,那么基本上需要给中间结果一个伪列标识这个汇总数据
with summary as (select f1,f2,v1,v2,sum(v1) v3 over(partition by f1))
select f1,f2,sum(v1),sum(v2),max(v3) v3
from summary
order by v3;