ORAcle 分析函数Word文档下载推荐.docx
- 文档编号:21445291
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:13
- 大小:22KB
ORAcle 分析函数Word文档下载推荐.docx
《ORAcle 分析函数Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《ORAcle 分析函数Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
为了提高聚合的性能。
Oracle提供了GroupBy条款的扩展。
1.CUBE,ROLLUP扩展
2.3个grouping函数
3.Groupingset扩展
CUBEROLLUPGROUPINGSETS对SQL的扩展使得查询和报告都变得简单和迅速。
Rollup计算诸如sumcountmaxminavg的函数,增加了聚合的级别.CUBE是一个类似ROLLUP的扩展,使得可以用一个语句计算所有可能的聚合。
CUBE可以通过单条生成Cross-tabulation(交叉报表)报告的信息。
CUBE,ROLLUP,GROUPINGSETS扩展令你可以精确的对你感兴趣的groupby条款进行grouping。
不运行cube操作也可以高效的从多个维度进行分析。
计算一个fullcube将会带来很高的负载,所以将cube替换为groupingsets可以明显地提高性能。
CUBEROLLUPGROUPINGSETS可以生成单个结果集,等效于UNIONALL。
为了提高性能,CUBE,ROLLUP,andGROUPINGSETS可以并行进行:
多进程同时运算所有的语句。
这种功能使得聚合计算更加高效,因此提高了数据库性能和可测性。
AnalyzingAcrossMultipleDimensions
多维分析
在DSS系统中一个很重要的概念是多维分析:
从多个角度对企业的状况进行查勘。
Demension,众多的维一般是时间,空间,产品,部门,渠道,企业的维度多种多样。
事件和实体关联特定的维度就是所谓的facts.这些所谓的facts可以是销售,现金,利润,客户账户,或是其他一些值得记录的东东。
下面是一些多维需求的例子
1.展示1999和2000年,所有产品的总销量,聚合级别为地域维度,从州到国家到地区。
2.创建交叉报表分析1999和2000年南美洲范围的费用,包括所有的小记
所有的需求都包含了多维。
很多多维的问题需要数据的聚合,数据集的比较,通常跨越时间,地域。
OptimizedPerformance
不仅仅是多维的问题,还有所有类型的处理可以从增强聚合功能中得到好处。
事务的处理,金融制造系统-所有的这些都产生大量的生产报告需要大量的系统资源。
创建这些报告减少系统负载,提升了系统性能。
事实上,计算机处理丛细节到高层的聚合数据可以通过优化聚合性能得到好处。
Oracle9i提供了扩展聚合功能,带来了很多好处。
包括:
1.简化代码编程
2.快而高效的查询处理
3.减少客户端负载和网络负载。
4.由于简单的查询可以缓冲聚合
参考:
oracle文档a96520.pdf
事关ROLLUPCUBEGROUPINGSETS
(2)
ROLLUPExtensiontoGROUPBY
Rollup可以令select语句根据group的维计算多层小计。
他也可以计算总计。
Rollup是对groupby的简单扩展,所以他的语法非常简单。
Rollup扩展非常高效,对一个查询增加的非常少的开销。
Rollup的行为非常直接,它根据groupinglist的Rollup条款创建小计。
它从右向左的进行再聚合。
首先,它计算grouping条款的标准聚合。
然后,它按照groupinglist列从右向左的顺序进行更高层的聚合。
最后,创建n+1层的总计。
N=grouping列的数量。
例如,一个查询用Rollup在groupinglist列出time,region,department,结果集包括4个聚合层次。
使用Rollup可以压缩数据。
这对于对旧有分区较少更新的情况十分有用。
WhentoUseROLLUP
一般在任务中包含小计的情况可以使用Rollup扩展。
ROLLUPSyntax
Rollup出现在select查询的groupby条款。
他的形式是:
Select…GroupbyRollup(grouping_column_reference_list)
Selectchannel_desc,
calendar_month_desc,
contry_id,
sum(amount_sold)SALES$
Fromsales,customers,times,channels
Wheresales.time_id=times.time_id
Andsales.cust_id=customer.cust_id
Andsales.channel_id=channels.channel_id
Andchannels.channel_descIN(‘directsales’,’Internet’)
Andtimes.calendar_month_descIN(‘2000-09’,’2000-10’)
Andcountry_idIN(‘UK’,’US’)
Groupbyrollup(channel_desc,calendar_month_desc,contry_id);
CHANNEL_DESCCALENDARCOSALES$
--------------------------------------------
DirectSales2000-09UK1,378,126
DirectSales2000-09US2,835,557
DirectSales2000-094,213,683
DirectSales2000-10UK1,388,051
DirectSales2000-10US2,908,706
DirectSales2000-104,296,757
DirectSales8,510,440
Internet2000-09UK911,739
Internet2000-09US1,732,240
Internet2000-092,643,979
Internet2000-10UK876,571
Internet2000-10US1,893,753
Internet2000-102,770,324
Internet5,414,303
13,924,743
Thisqueryreturnsthefollowingsetsofrows:
这个查询返回如下的行:
1.Groupby条款规定的标准聚合
2.基于country_id层的小计
3.基于calendar_month_desc和country_id的2层聚合
4.总计
PartialRollup部分rollup
你也可以使用Rollup包含有限的几个小计。
部分rollup的语法是
Groupbyexpr1,Rollup(expr2,expr3)
这种情况下,groupby条款创建2+1层的小记。
层次为(expr1,expr2,expr3)(expr1,expr2)(expr1)
selectchannel_desc,
country_id,
sum(amount_sold)sales$
fromsales,customers,times,channels
Groupbychannel_desc,rollup(calendar_month_desc,country_id);
这个查询返回下面的行
4.不计算总计
参考文档编号:
a96520.pdf
事关ROLLUPCUBEGROUPINGSETS(3)
CUBEExtensiontoGROUPBY
CUBE进行grouping列规定的grouping,创建所有可能的小计。
在多维分析的术语中,CUBE生成CUBE数据规定维度的所有能计算的小记。
如果规定了CUBE(time,region,department),那么结果集将会包括相应rollup的所有值加上额外的合并。
如果有n类在CUBE中规定,那么将会有2的n次方的小记返回。
WhentoUseCUBE
需要交叉报表的地方可以用Cube。
交叉报表的数据生成可以通过简单的带有Cube的select查询语句实现。
像Rollup,Cube在总结性报表中非常有用。
Cube相比较一维多层,在多维的情况下更有用。
CUBESyntax
CUBE出现在select语句的groupby条款中。
它的形式是:
Select…groupbyCUBE(group_column_reference_list)
例:
GroupbyCUBE(channel_desc,calendar_month_desc,country_id);
DirectSalesUK2,766,177
DirectSalesUS5,744,263
InternetUK1,788,310
InternetUS3,625,993
2000-09UK2,289,865
2000-09US4,567,797
2000-096,857,662
2000-10UK2,264,622
2000-10US4,802,459
2000-107,067,081
UK4,554,487
US9,370,256
PartialCUBE部分CUBE
部分CUBE类似部分ROLLUP,可以限制某些维度,还可以把一些列放在CUBE之外。
这种情况下,所有可能的小节限制在CUBE列表之中。
部分CUBE语法
GROUPBYexpr1,CUBE(expr2,expr3)
计算4次小计:
n(expr1,expr2,expr3)
n(expr1,expr2)
n(expr1,expr3)
n(expr1)
CalculatingSubtotalsWithoutCUBE不使用CUBE计算小计
像ROLLUP一样,多个select语句使用UNIONALL连接可以提供跟CUBE相同的信息。
但是,却需要多个select语句。
对于n维CUBE,需要2的n次方个select查询。
在3维的例子中,这意味着需要把这些select语句都通过UNIONALL联接起来。
这么多的select语句将会使得处理不够高效,并且加长sql语句。
GROUPINGFunctions
ROLLUP和CUBE带来了两个问题。
第一,你怎么让程序知道结果集哪一行代表小节,并且怎样知道对于一个给定的小节找到确切的聚合层次?
如果查询结果出现NULL还有CUBEROLLUP产生的NULL,你如何来区分呢
GROUPINGFunction
Grouping解决上面的问题。
使用一个列作为参数。
Grouping当rollup和cube生成的NULL值时返回1。
就是说如果这一列是个小节,则grouping返回1;
否则返回0
Grouping的语法
Grouping出现在select条款中,形如
Select…[grouping(dimension_column)…]…
Groupby…{CUBE|ROLLUP|GROUPINGSETS}(dimension_column)
举例
SELECT
DECODE(GROUPING(channel_desc),1,'
AllChannels'
hannel_desc)
ASChannel,
DECODE(GROUPING(country_id),1,'
AllCountries'
country_id)
ASCountry,
TO_CHAR(SUM(amount_sold),'
9,999,999,999'
)SALES$
FROMsales,customers,times,channels
WHEREsales.time_id=times.time_idAND
sales.cust_id=customers.cust_idAND
sales.channel_id=channels.channel_idAND
channels.channel_descIN('
DirectSales'
'
Internet'
)AND
times.calendar_month_desc='
2000-09'
ANDcountry_idIN('
UK'
US'
)
GROUPBYCUBE(channel_desc,country_id)
CHANNELCOUNTRYSALES$
-----------------------------------------------
DirectSalesUK1,378,126
DirectSalesUS2,835,557
DirectSalesAllCountries4,213,683
InternetUK911,739
InternetUS1,732,240
InternetAllCountries2,643,979
AllChannelsUK2,289,865
AllChannelsUS4,567,797
AllChannelsAllCountries6,857,662
使用having子句来限制
HAVING
(GROUPING(channel_desc)=1ANDGROUPING(calendar_month_desc)=1AND
GROUPING(country_id)=1)OR
(GROUPING(channel_desc)=1ANDGROUPING(calendar_month_desc)=1)OR
(GROUPING(country_id)=1ANDGROUPING(calendar_month_desc)=1);
这样得到的全是聚合数据.
GROUPINGSETSExpression
通过groupsets表达式,你可以选择性的设置你想要的grouping。
例如:
SELECTchannel_desc,calendar_month_desc,country_id,
times.calendar_month_descIN('
2000-10'
GROUPBYGROUPINGSETS((channel_desc,calendar_month_desc,country_id),
(channel_desc,country_id),(calendar_month_desc,country_id));
这个语句计算3个grouping
n(channel_desc,calendar_month_desc,country_id)
n(channel_desc,country_id)
n(calendar_month_desc,country_id)
CUBE(a,b,c)等效于
Groupingsets((a,b,c),(a,b),(a,c),(b,c),(a),(b),(c),())和rollup(a,b,c)
CompositeColumns组合列
组合列示列的集合在计算grouping的时候可以看作一个单元。
ROLLUP(year,(quarter,month),day)意思是
n(year,quarter,month,day),
n(year,quarter,month),
n(year)
THEEND
参考文档编号a96520.pdf
参考文档名称Oracle9iDataWarehousingGuide第18章
部分词语不做翻译,例如groupgroupingCUBErollup等等。
例如,一个查询用R
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ORAcle 分析函数 分析 函数