`

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 = 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 channel_desc,rollup(calendar_month_desc,country_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
这个查询返回下面的行
1. Group by条款规定的标准聚合
2. 基于country_id层的小计
3. 基于calendar_month_desc和country_id的2层聚合
4. 不计算总计
参考文档编号:a96520.pdf

 


事关ROLLUP CUBE GROUPINGSETS (3)
CUBE Extension to GROUP BY


CUBE进行grouping列规定的grouping,创建所有可能的小计。在多维分析的术语中,CUBE生成CUBE数据规定维度的所有能计算的小记。
如果规定了CUBE(time,region,department),那么结果集将会包括相应rollup的所有值加上额外的合并。如果有n类在CUBE中规定,那么将会有2的n次方的小记返回。

When to Use CUBE
需要交叉报表的地方可以用Cube。交叉报表的数据生成可以通过简单的带有Cube的select查询语句实现。像Rollup,Cube在总结性报表中非常有用。Cube相比较一维多层,在多维的情况下更有用。
CUBE Syntax
CUBE出现在select语句的group by条款中。它的形式是:
Select … group by CUBE (group_column_reference_list)
例:
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 = 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 CUBE (channel_desc,calendar_month_desc,country_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 UK 2,766,177
Direct Sales US 5,744,263
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 UK 1,788,310
Internet US 3,625,993
Internet 5,414,303
2000-09 UK 2,289,865
2000-09 US 4,567,797
2000-09 6,857,662
2000-10 UK 2,264,622
2000-10 US 4,802,459
2000-10 7,067,081
UK 4,554,487
US 9,370,256
13,924,743

Partial CUBE部分CUBE
部分CUBE类似部分ROLLUP,可以限制某些维度,还可以把一些列放在CUBE之外。这种情况下,所有可能的小节限制在CUBE列表之中。
部分CUBE 语法
GROUP BY expr1, CUBE(expr2, expr3)
计算4次小计:
n (expr1, expr2, expr3)
n (expr1, expr2)
n (expr1, expr3)
n (expr1)
Calculating Subtotals Without CUBE不使用CUBE计算小计
像ROLLUP一样,多个select语句使用UNION ALL连接可以提供跟CUBE相同的信息。但是,却需要多个select语句。对于n维CUBE,需要2的n次方个select查询。
在3维的例子中,这意味着需要把这些select语句都通过UNION ALL联接起来。
这么多的select语句将会使得处理不够高效,并且加长sql语句。
GROUPING Functions
ROLLUP和CUBE带来了两个问题。
第一, 你怎么让程序知道结果集哪一行代表小节,并且怎样知道对于一个给定的小节找到确切的聚合层次?
如果查询结果出现NULL还有CUBE ROLLUP产生的NULL,你如何来区分呢
GROUPING Function
Grouping 解决上面的问题。使用一个列作为参数。Grouping当rollup 和 cube生成的NULL值时返回1。就是说如果这一列是个小节,则grouping返回1;否则返回0
Grouping 的语法
Grouping出现在select条款中,形如
Select … [grouping(dimension_column) … ] …
Group by … {CUBE | ROLLUP | GROUPING SETS} (dimension_column)

举例
SELECT
DECODE(GROUPING(channel_desc), 1, 'All Channels', hannel_desc)
AS Channel,
DECODE(GROUPING(country_id), 1, 'All Countries', country_id)
AS Country,
TO_CHAR(SUM(amount_sold), '9,999,999,999') SALES$
FROM sales, customers, times, channels
WHERE sales.time_id=times.time_id AND
sales.cust_id=customers.cust_id AND
sales.channel_id= channels.channel_id AND
channels.channel_desc IN ('Direct Sales', 'Internet') AND
times.calendar_month_desc= '2000-09'
AND country_id IN ('UK', 'US')
GROUP BY CUBE(channel_desc, country_id)

CHANNEL COUNTRY SALES$
-------------------- ------------- --------------
Direct Sales UK 1,378,126
Direct Sales US 2,835,557
Direct Sales All Countries 4,213,683
Internet UK 911,739
Internet US 1,732,240
Internet All Countries 2,643,979
All Channels UK 2,289,865
All Channels US 4,567,797
All Channels All Countries 6,857,662

使用having子句来限制
HAVING
(GROUPING(channel_desc)=1 AND GROUPING(calendar_month_desc)= 1 AND
GROUPING(country_id)=1) OR
(GROUPING(channel_desc)=1 AND GROUPING(calendar_month_desc)= 1) OR
(GROUPING(country_id)=1 AND GROUPING(calendar_month_desc)= 1);
这样得到的全是聚合数据.

GROUPING SETS Expression
通过group sets表达式,你可以选择性的设置你想要的grouping。
例如:

SELECT channel_desc, calendar_month_desc, country_id,
TO_CHAR(SUM(amount_sold), '9,999,999,999') SALES$
FROM sales, customers, times, channels
WHERE sales.time_id=times.time_id AND
sales.cust_id=customers.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 GROUPING SETS((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) 等效于
Grouping sets ( (a,b,c), (a,b),(a,c),(b,c),(a),(b),(c),() ) 和 rollup(a,b,c)
Composite Columns 组合列
组合列示列的集合在计算grouping的时候可以看作一个单元。

ROLLUP (year, (quarter, month), day)意思是
n (year, quarter, month, day),
n (year, quarter, month),
n (year)
THE END
参考文档编号 a96520.pdf
参考文档名称 Oracle9i Data Warehousing Guide 第18章
部分词语不做翻译,例如group grouping CUBE rollup等等。

 

 

事关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 = 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 channel_desc,rollup(calendar_month_desc,country_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
这个查询返回下面的行
1. Group by条款规定的标准聚合
2. 基于country_id层的小计
3. 基于calendar_month_desc和country_id的2层聚合
4. 不计算总计
参考文档编号:a96520.pdf

 


事关ROLLUP CUBE GROUPINGSETS (3)
CUBE Extension to GROUP BY


CUBE进行grouping列规定的grouping,创建所有可能的小计。在多维分析的术语中,CUBE生成CUBE数据规定维度的所有能计算的小记。
如果规定了CUBE(time,region,department),那么结果集将会包括相应rollup的所有值加上额外的合并。如果有n类在CUBE中规定,那么将会有2的n次方的小记返回。

When to Use CUBE
需要交叉报表的地方可以用Cube。交叉报表的数据生成可以通过简单的带有Cube的select查询语句实现。像Rollup,Cube在总结性报表中非常有用。Cube相比较一维多层,在多维的情况下更有用。
CUBE Syntax
CUBE出现在select语句的group by条款中。它的形式是:
Select … group by CUBE (group_column_reference_list)
例:
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 = 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 CUBE (channel_desc,calendar_month_desc,country_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 UK 2,766,177
Direct Sales US 5,744,263
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 UK 1,788,310
Internet US 3,625,993
Internet 5,414,303
2000-09 UK 2,289,865
2000-09 US 4,567,797
2000-09 6,857,662
2000-10 UK 2,264,622
2000-10 US 4,802,459
2000-10 7,067,081
UK 4,554,487
US 9,370,256
13,924,743

Partial CUBE部分CUBE
部分CUBE类似部分ROLLUP,可以限制某些维度,还可以把一些列放在CUBE之外。这种情况下,所有可能的小节限制在CUBE列表之中。
部分CUBE 语法
GROUP BY expr1, CUBE(expr2, expr3)
计算4次小计:
n (expr1, expr2, expr3)
n (expr1, expr2)
n (expr1, expr3)
n (expr1)
Calculating Subtotals Without CUBE不使用CUBE计算小计
像ROLLUP一样,多个select语句使用UNION ALL连接可以提供跟CUBE相同的信息。但是,却需要多个select语句。对于n维CUBE,需要2的n次方个select查询。
在3维的例子中,这意味着需要把这些select语句都通过UNION ALL联接起来。
这么多的select语句将会使得处理不够高效,并且加长sql语句。
GROUPING Functions
ROLLUP和CUBE带来了两个问题。
第一, 你怎么让程序知道结果集哪一行代表小节,并且怎样知道对于一个给定的小节找到确切的聚合层次?
如果查询结果出现NULL还有CUBE ROLLUP产生的NULL,你如何来区分呢
GROUPING Function
Grouping 解决上面的问题。使用一个列作为参数。Grouping当rollup 和 cube生成的NULL值时返回1。就是说如果这一列是个小节,则grouping返回1;否则返回0
Grouping 的语法
Grouping出现在select条款中,形如
Select … [grouping(dimension_column) … ] …
Group by … {CUBE | ROLLUP | GROUPING SETS} (dimension_column)

举例
SELECT
DECODE(GROUPING(channel_desc), 1, 'All Channels', hannel_desc)
AS Channel,
DECODE(GROUPING(country_id), 1, 'All Countries', country_id)
AS Country,
TO_CHAR(SUM(amount_sold), '9,999,999,999') SALES$
FROM sales, customers, times, channels
WHERE sales.time_id=times.time_id AND
sales.cust_id=customers.cust_id AND
sales.channel_id= channels.channel_id AND
channels.channel_desc IN ('Direct Sales', 'Internet') AND
times.calendar_month_desc= '2000-09'
AND country_id IN ('UK', 'US')
GROUP BY CUBE(channel_desc, country_id)

CHANNEL COUNTRY SALES$
-------------------- ------------- --------------
Direct Sales UK 1,378,126
Direct Sales US 2,835,557
Direct Sales All Countries 4,213,683
Internet UK 911,739
Internet US 1,732,240
Internet All Countries 2,643,979
All Channels UK 2,289,865
All Channels US 4,567,797
All Channels All Countries 6,857,662

使用having子句来限制
HAVING
(GROUPING(channel_desc)=1 AND GROUPING(calendar_month_desc)= 1 AND
GROUPING(country_id)=1) OR
(GROUPING(channel_desc)=1 AND GROUPING(calendar_month_desc)= 1) OR
(GROUPING(country_id)=1 AND GROUPING(calendar_month_desc)= 1);
这样得到的全是聚合数据.

GROUPING SETS Expression
通过group sets表达式,你可以选择性的设置你想要的grouping。
例如:

SELECT channel_desc, calendar_month_desc, country_id,
TO_CHAR(SUM(amount_sold), '9,999,999,999') SALES$
FROM sales, customers, times, channels
WHERE sales.time_id=times.time_id AND
sales.cust_id=customers.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 GROUPING SETS((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) 等效于
Grouping sets ( (a,b,c), (a,b),(a,c),(b,c),(a),(b),(c),() ) 和 rollup(a,b,c)
Composite Columns 组合列
组合列示列的集合在计算grouping的时候可以看作一个单元。

ROLLUP (year, (quarter, month), day)意思是
n (year, quarter, month, day),
n (year, quarter, month),
n (year)
THE END
参考文档编号 a96520.pdf
参考文档名称 Oracle9i Data Warehousing Guide 第18章
部分词语不做翻译,例如group grouping CUBE rollup等等。

 

 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wangdongzjk/archive/2005/11/18/532424.aspx

分享到:
评论

相关推荐

    Oracle ROLLUP和CUBE 用法

    Oracle数据库中的ROLLUP和CUBE是两种用于生成数据汇总的SQL操作,它们在数据分析和报告制作中非常有用。本文将详细介绍这两个概念以及如何在实际应用中使用它们。 首先,我们来理解`ROLLUP`。ROLLUP操作是GROUP BY...

    oracle中聚合函数的扩展使用(ROLLUP CUBE、GROUPING()函数与ROLLUP、CUBE的结合使用等)

    当我们需要更复杂的分组和汇总信息时,可以使用扩展的聚合功能,如ROLLUP、CUBE以及GROUPING()和GROUPING_ID()函数。这些功能允许我们生成多层次的总计和小计,为数据分析提供了极大的灵活性。 1. ROLLUP子句: ...

    rollup及cube的使用

    ### Oracle中的ROLLUP与CUBE使用详解 在Oracle数据库中,`ROLLUP`与`CUBE`是非常重要的分组函数,被广泛应用于数据汇总、数据分析等场景中。这两个功能可以帮助开发人员快速地对数据进行多维度分析,是开发人员必备...

    group by分组函数之rollup与cube用法1

    而在GROUP BY的基础上,Oracle数据库提供了两种高级分组功能:ROLLUP和CUBE,它们允许我们更灵活地生成汇总数据。 1. ROLLUP(滚联回溯): ROLLUP是GROUP BY的一个扩展,它不仅返回每个单独的分组结果,还会生成...

    oracle的分析函数汇总

    例如,可以使用 Rollup 函数对数据进行分组和汇总,使用 Rank 函数对数据进行排名,使用 Lag 和 Lead 函数对数据进行延迟和前导操作,使用 Sum 和 Avg 函数对数据进行汇总和平均计算,使用 Ratio_to_Report 函数对...

    Oracle 分析函数.doc

    1. **自动汇总函数:ROLLUP 和 CUBE** - **ROLLUP** 函数用于生成层次化的汇总数据。它会根据提供的列进行逐级汇总,从最细粒度到最粗粒度。例如,如果有`BILL_MONTH`和`AREA_CODE`两列,ROLLUP会分别计算月度、...

    Oracle分组函数之ROLLUP的基本用法

    总结来说,Oracle的`ROLLUP`和`CUBE`函数是强大的数据分析工具,能够帮助用户快速生成多层次的汇总数据,适用于各种复杂的数据报告需求。在处理大量数据时,它们的简洁语法和高效性能使得数据聚合变得更为方便。理解...

    SQL和Oracle数据库函数说明

    2. **分组和分析函数**:`GROUP BY ROLLUP()`和`CUBE()`实现多级分组,`RANK()`、`DENSE_RANK()`和`ROW_NUMBER()`用于行排序和排名。 3. **系统信息函数**:如`SYSDATE`获取当前系统日期,`USER`返回当前用户。 4. *...

    Oracle聚合函数及其扩展使用

    Oracle 聚合函数及其扩展使用 Oracle 聚合函数是指在 Oracle 数据库中对数据进行...Oracle 聚合函数及其扩展使用可以帮助开发人员和数据库管理员更好地对数据进行统计、分析和计算,从而获取有价值的信息和 insights。

    ORACLE分析函数.pdf

    Oracle分析函数是数据库管理系统Oracle中的一种高级SQL特性,它允许用户在单个查询中对一组行进行计算,而无需使用子查询或自连接。这些函数极大地增强了数据分析和报告的能力,提高了查询性能。以下是对Oracle分析...

    oracle内置函数大全

    - `ROLLUP` 和 `CUBE`:生成多级汇总数据。 - `HAVING`:在分组后过滤数据。 8. 连接函数: - `JOIN`:将多个表的数据结合在一起。 - `LEFT JOIN`, `RIGHT JOIN`, `FULL OUTER JOIN`:分别执行左连接、右连接...

    Oracle分析函数

    Oracle分析函数为数据处理提供了强大的工具箱,使得开发者能够轻松地执行复杂的统计分析和数据处理任务。通过熟练掌握这些函数,可以在数据分析、报告生成等方面大大提高效率。无论是简单的聚合操作还是复杂的分布...

    oracle分析函数的使用

    1. **自动汇总函数 (ROLLUP, CUBE)** - `ROLLUP` 用于创建多级汇总,它会生成一个从最细粒度级别到最粗粒度级别的层次结构,类似于Excel中的数据透视表的行标签部分。 - `CUBE` 则生成所有可能的组合,包括单列、...

    Oracle 分析函数的使用.doc

    1. **自动汇总函数:rollup, cube** - `ROLLUP` 用于生成分组的层次结构,它从最细粒度的分组开始,逐步向上汇总,直到最高级别的汇总。例如,你可以计算每个区域、每个网络类型的费用,然后逐级汇总到地区和全部...

    Oracle分析函数.doc

    Oracle分析函数是数据库管理系统Oracle中的一种高级特性,用于处理和分析数据集,提供了一种高效的方式来执行聚合操作,而无需多次查询数据库。分析函数能够直接在单次查询中完成复杂的数据计算,包括排序、分组、...

    oracle 分组函数

    本篇文章将详细阐述Oracle分组函数的概念、功能以及常用分组函数的使用方法。 一、分组函数概述 分组函数主要作用于一组数据上,而不是单个记录,它们用于对数据进行汇总,如计算总和、平均值、最大值、最小值等。...

    oracle函数

    Oracle数据库函数是数据库管理系统Oracle中实现特定计算或数据处理的核心工具。它们分为多种类型,包括聚合函数、分析函数、转换函数、数学函数...正确理解和使用这些函数是优化SQL查询性能和实现复杂业务逻辑的基础。

    oracle分析函数介绍

    Cube函数则更进一步,它不仅提供Rollup的所有汇总,还生成所有可能的子集组合。这样,可以一次性获取所有可能的组合汇总结果。 2. **Rank函数:Rank, Dense_Rank, Row_Number** 这些函数用于为一组行分配顺序号。...

    Ooracle 分析函数的使用实例

    本文将通过具体示例,深入探讨Oracle分析函数的几个关键应用,包括:汇总函数ROLLUP和CUBE、排名函数RANK和DENSE_RANK、LAG和LEAD函数、SUM和AVG的移动计算、RATIO_TO_REPORT报表处理函数以及FIRST和LAST取基数函数...

Global site tag (gtag.js) - Google Analytics