oralce rollup 小计合计_oracle rollup和cube函数使用心得

事关CUBE ROLLUP GROUPING SETS(1)原文引自:

聚合是数据仓库的基础。为了提高聚合的性能。Oracle提供了Group By 条款的扩展。

1. CUBE, ROLLUP扩展

2. 3个grouping函数

3. Grouping set扩展

CUBE ROLLUP GROUPING SETS对SQL的扩展使得查询和报告都变得简单和迅速。Rollup计算诸如sum count max min avg的函数,增加了聚合的级别.CUBE是一个类似ROLLUP的扩展,使得可以用一个语句计算所有可能的聚合。CUBE可以通过单条生成Cross-tabulation(交叉报表)报告的信息。CUBE,ROLLUP,GROUPING SETS扩展令你可以精确的对你感兴趣的group by 条款进行grouping。不运行cube操作也可以高效的从多个维度进行分析。计算一个full cube将会带来很高的负载,所以将cube替换为grouping sets可以明显地提高性能。CUBE ROLLUP GROUPING SETS可以生成单个结果集,等效于UNION ALL。为了提高性能,CUBE, ROLLUP, and GROUPING SETS可以并行进行:多进程同时运算所有的语句。这种功能使得聚合计算更加高效,因此提高了数据库性能和可测性。

Analyzing Across Multiple Dimensions

多维分析

在DSS系统中一个很重要的概念是多维分析:

从多个角度对企业的状况进行查勘。Demension,众多的维一般是时间,空间,产品,部门,渠道,企业的维度多种多样。事件和实体关联特定的维度就是所谓的facts.这些所谓的facts可以是销售,现金,利润,客户账户,或是其他一些值得记录的东东。

下面是一些多维需求的例子

1. 展示1999和2000年,所有产品的总销量,聚合级别为地域维度,从州到国家到地区。

2. 创建交叉报表分析1999和2000年南美洲范围的费用,包括所有的小记



所有的需求都包含了多维。很多多维的问题需要数据的聚合,数据集的比较,通常跨越时间,地域。



Optimized Performance

不仅仅是多维的问题,还有所有类型的处理可以从增强聚合功能中得到好处。事务的处理,金融制造系统-所有的这些都产生大量的生产报告需要大量的系统资源。创建这些报告减少系统负载,提升了系统性能。

事实上,计算机处理丛细节到高层的聚合数据可以通过优化聚合性能得到好处。

Oracle9i提供了扩展聚合功能,带来了很多好处。包括:

1. 简化代码编程

2. 快而高效的查询处理

3. 减少客户端负载和网络负载。

4. 由于简单的查询可以缓冲聚合









参考:oracle文档a96520.pdf

事关ROLLUP CUBE GROUPING SETS(2)

ROLLUP Extension to GROUP BY

Rollup可以令select 语句根据group的维计算多层小计。他也可以计算总计。Rollup是对group by的简单扩展,所以他的语法非常简单。Rollup扩展非常高效,对一个查询增加的非常少的开销。

Rollup的行为非常直接,它根据grouping list的Rollup条款创建小计。它从右向左的进行再聚合。

首先,它计算grouping条款的标准聚合。

然后,它按照grouping list列从右向左的顺序进行更高层的聚合。

最后,创建n+1层的总计。N = grouping列的数量。

例如,一个查询用Rollup在grouping list列出time,region,department,结果集包括4个聚合层次。使用Rollup可以压缩数据。这对于对旧有分区较少更新的情况十分有用。



When to Use ROLLUP

一般在任务中包含小计的情况可以使用Rollup扩展。

ROLLUP Syntax

Rollup出现在select查询的group by条款。他的形式是:

Select … Group by Rollup(grouping_column_reference_list)

Select channel_desc,

calendar_month_desc,

contry_id,

sum(amount_sold) SALES$

From sales,customers,times,channels

Where sales.time_id=times.time_id

 And sales.cust_id = customer.cust_id

 And sales.channel_id = channels.channel_id

 And channels.channel_desc IN ( ‘direct sales’,’Internet’)

 And times.calendar_month_desc IN (‘2000-09’,’2000-10’)

 And country_id IN (‘UK’,’US’)

Group by rollup (channel_desc,calendar_month_desc,contry_id);

CHANNEL_DESC CALENDAR CO SALES$

-------------------- -------- -- --------------

Direct Sales 2000-09 UK 1,378,126

Direct Sales 2000-09 US 2,835,557

Direct Sales 2000-09 4,213,683

Direct Sales 2000-10 UK 1,388,051

Direct Sales 2000-10 US 2,908,706

Direct Sales 2000-10 4,296,757

Direct Sales 8,510,440

Internet 2000-09 UK 911,739

Internet 2000-09 US 1,732,240

Internet 2000-09 2,643,979

Internet 2000-10 UK 876,571

Internet 2000-10 US 1,893,753

Internet 2000-10 2,770,324

Internet 5,414,303

13,924,743



This query returns the following sets of rows:这个查询返回如下的行:

1. Group by条款规定的标准聚合

2. 基于country_id层的小计

3. 基于calendar_month_desc和country_id的2层聚合

4. 总计

Partial Rollup 部分rollup

你也可以使用Rollup包含有限的几个小计。部分rollup的语法是

Group by expr1,Rollup(expr2,expr3)

这种情况下,group by 条款创建2+1层的小记。

层次为(expr1,expr2,expr3)(expr1,expr2)(expr1)



select channel_desc,

calendar_month_desc,

country_id,

sum(amount_sold) sales$

from sales,customers,times,channels

Where sales.time_id=times.time_id

 And sales.cust_id &

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值