Oracle提供了很多高级的统计函数,如rollup、cube、grouping、grouping sets,同时在数据库层还提供了维、立方等对象,可以通过定义维和立方实现查询重写,提高数据仓库的
select 批次号,种类,单位类型,sum(金额),count(1) from 数据表 where 批次号 = 20080727 and 顺序号 < 200807031223222133 group by 批次号,cube(种类,单位类型);
----------------------------------------------------
1 20080727 175176.6 1395(汇总行)
2 20080727 73 175176.6 1395(根据单位类型汇总行)
3 20080727 11 107122.4 413(根据种类汇总行)
4 20080727 11 73 107122.4 413(根据种类单位类型汇总行)
5 20080727 31 62534.2 430
6 20080727 31 73 62534.2 430
7 20080727 32 5520 552
8 20080727 32 73 5520 552
执行计划中会有
SELECT STATEMENT, GOAL = ALL_ROWS Cost=21 Cardinality=32 Bytes=1120
SORT GROUP BY Cost=21 Cardinality=32 Bytes=1120
GENERATE CUBE Cost=21 Cardinality=32 Bytes=1120
SORT GROUP BY Cost=21 Cardinality=32 Bytes=1120
TABLE ACCESS BY INDEX ROWID Object owner=Object name=Cost=20 Cardinality=175 Bytes=6125
INDEX RANGE SCAN Object owner=Object name=IDX__AAB001 Cost=4 Cardinality=370