- 浏览: 759929 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
di1984HIT:
哈哈,都不错。
Linux 环境下SQLPLUS 回退键无法使用处理方法 -
di1984HIT:
还可以查到sql
oracle中查询被锁的表并释放session -
di1984HIT:
呵呵,真的不错。
Oracle数据库经常会遇到CPU利用率很高的情况 -
李君寻:
...
解读java连接db2的四种类型 -
清风123:
dx>=this.length
js删除Array数组中的某个元素
事关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
发表评论
-
ORA-01950: no privileges on tablespace "example_tbs"
2012-04-20 14:38 1377原因:用户没有此表空间分配EXTENT的权限 可以两个 ... -
Oracle 数据字典视图(V$,GV$,X$)
2010-06-10 11:11 2270常用的几个数据字典: ... -
oracle中查询被锁的表并释放session
2010-06-10 10:10 2755在开发项目中经常发现有人锁住表不放 我们可以通alter s ... -
在oracle中通过connect by prior来实现递归查询
2010-05-06 13:52 1586connect by 是结构化查询 ... -
oracle中跟用户及权限有关的系统表
2010-04-20 15:54 14501.查看所有用户: select * from dba_u ... -
oracle 物化视图
2010-04-20 09:24 2309优势 可以提 ... -
oracle 查看跟踪文件
2010-03-24 09:35 1235sql_trace 和10046 事件 首先 SQL> ... -
v$lock视图
2010-03-19 15:49 2038v$lock视图SID:Identifier for sess ... -
如何设置Oracle Events以跟踪数据库
2010-03-18 10:33 1784Events事件是Oracle的重要诊断工具及问题解决办法,很 ... -
oracle“SQL Trace”简介
2010-03-17 17:03 1957一、概述 “SQL TRACE”是Oracle提供的用于进行 ... -
Oracle数据库提高命中率及相关优化
2010-03-15 17:06 2049本文是关于Oracle数据库调试与优化方面的文章,主要介绍Or ... -
多种方法查看Oracle SQL执行计划
2010-03-15 16:38 2266一.在线查看执行计划表如果PLAN_TABLE表不存在,执行$ ... -
Oracle数据库经常会遇到CPU利用率很高的情况
2010-03-15 16:32 16876Oracle数据库经常会遇到CPU利用率很高的情况,这种时候大 ... -
oracle hint提示优化SQL
2010-03-09 16:47 1649在优化调整数据库的SQL时候,经常会用到HINT提示.目前OR ... -
oracle问题 SP2-0613: 无法验证 PLAN_TABLE 格式或实体
2010-03-05 11:40 1855此错误表示还没有创建 plan_table 表 先创建 ... -
Oracle truncate table 与 delete tabel的区别
2010-03-04 13:56 2014一、 1.delete产生rollback,如果删除大数据 ... -
Oracle 索引的分类
2010-03-02 17:54 1741逻辑上: Single column 单列索引Concaten ... -
oracle 锁等待的诊断及排除
2010-03-02 16:38 2731在ORACLE中,为了保证数据的一致性,在对数据库中的数据进行 ... -
Red Hat Enterprise Linux 5 上安装RAC环境
2010-01-29 16:36 1189oracle 10 在 Red Hat Enterprise ... -
oracle9i 启用Partition功能
2009-11-25 17:44 14871、确定安装oracle9i企业版本 select * fr ...
相关推荐
Oracle数据库中的ROLLUP和CUBE是两种用于生成数据汇总的SQL操作,它们在数据分析和报告制作中非常有用。本文将详细介绍这两个概念以及如何在实际应用中使用它们。 首先,我们来理解`ROLLUP`。ROLLUP操作是GROUP BY...
当我们需要更复杂的分组和汇总信息时,可以使用扩展的聚合功能,如ROLLUP、CUBE以及GROUPING()和GROUPING_ID()函数。这些功能允许我们生成多层次的总计和小计,为数据分析提供了极大的灵活性。 1. ROLLUP子句: ...
### Oracle中的ROLLUP与CUBE使用详解 在Oracle数据库中,`ROLLUP`与`CUBE`是非常重要的分组函数,被广泛应用于数据汇总、数据分析等场景中。这两个功能可以帮助开发人员快速地对数据进行多维度分析,是开发人员必备...
而在GROUP BY的基础上,Oracle数据库提供了两种高级分组功能:ROLLUP和CUBE,它们允许我们更灵活地生成汇总数据。 1. ROLLUP(滚联回溯): ROLLUP是GROUP BY的一个扩展,它不仅返回每个单独的分组结果,还会生成...
例如,可以使用 Rollup 函数对数据进行分组和汇总,使用 Rank 函数对数据进行排名,使用 Lag 和 Lead 函数对数据进行延迟和前导操作,使用 Sum 和 Avg 函数对数据进行汇总和平均计算,使用 Ratio_to_Report 函数对...
1. **自动汇总函数:ROLLUP 和 CUBE** - **ROLLUP** 函数用于生成层次化的汇总数据。它会根据提供的列进行逐级汇总,从最细粒度到最粗粒度。例如,如果有`BILL_MONTH`和`AREA_CODE`两列,ROLLUP会分别计算月度、...
总结来说,Oracle的`ROLLUP`和`CUBE`函数是强大的数据分析工具,能够帮助用户快速生成多层次的汇总数据,适用于各种复杂的数据报告需求。在处理大量数据时,它们的简洁语法和高效性能使得数据聚合变得更为方便。理解...
2. **分组和分析函数**:`GROUP BY ROLLUP()`和`CUBE()`实现多级分组,`RANK()`、`DENSE_RANK()`和`ROW_NUMBER()`用于行排序和排名。 3. **系统信息函数**:如`SYSDATE`获取当前系统日期,`USER`返回当前用户。 4. *...
Oracle 聚合函数及其扩展使用 Oracle 聚合函数是指在 Oracle 数据库中对数据进行...Oracle 聚合函数及其扩展使用可以帮助开发人员和数据库管理员更好地对数据进行统计、分析和计算,从而获取有价值的信息和 insights。
Oracle分析函数是数据库管理系统Oracle中的一种高级SQL特性,它允许用户在单个查询中对一组行进行计算,而无需使用子查询或自连接。这些函数极大地增强了数据分析和报告的能力,提高了查询性能。以下是对Oracle分析...
- `ROLLUP` 和 `CUBE`:生成多级汇总数据。 - `HAVING`:在分组后过滤数据。 8. 连接函数: - `JOIN`:将多个表的数据结合在一起。 - `LEFT JOIN`, `RIGHT JOIN`, `FULL OUTER JOIN`:分别执行左连接、右连接...
Oracle分析函数为数据处理提供了强大的工具箱,使得开发者能够轻松地执行复杂的统计分析和数据处理任务。通过熟练掌握这些函数,可以在数据分析、报告生成等方面大大提高效率。无论是简单的聚合操作还是复杂的分布...
1. **自动汇总函数 (ROLLUP, CUBE)** - `ROLLUP` 用于创建多级汇总,它会生成一个从最细粒度级别到最粗粒度级别的层次结构,类似于Excel中的数据透视表的行标签部分。 - `CUBE` 则生成所有可能的组合,包括单列、...
1. **自动汇总函数:rollup, cube** - `ROLLUP` 用于生成分组的层次结构,它从最细粒度的分组开始,逐步向上汇总,直到最高级别的汇总。例如,你可以计算每个区域、每个网络类型的费用,然后逐级汇总到地区和全部...
Oracle分析函数是数据库管理系统Oracle中的一种高级特性,用于处理和分析数据集,提供了一种高效的方式来执行聚合操作,而无需多次查询数据库。分析函数能够直接在单次查询中完成复杂的数据计算,包括排序、分组、...
本篇文章将详细阐述Oracle分组函数的概念、功能以及常用分组函数的使用方法。 一、分组函数概述 分组函数主要作用于一组数据上,而不是单个记录,它们用于对数据进行汇总,如计算总和、平均值、最大值、最小值等。...
Oracle数据库函数是数据库管理系统Oracle中实现特定计算或数据处理的核心工具。它们分为多种类型,包括聚合函数、分析函数、转换函数、数学函数...正确理解和使用这些函数是优化SQL查询性能和实现复杂业务逻辑的基础。
Cube函数则更进一步,它不仅提供Rollup的所有汇总,还生成所有可能的子集组合。这样,可以一次性获取所有可能的组合汇总结果。 2. **Rank函数:Rank, Dense_Rank, Row_Number** 这些函数用于为一组行分配顺序号。...
本文将通过具体示例,深入探讨Oracle分析函数的几个关键应用,包括:汇总函数ROLLUP和CUBE、排名函数RANK和DENSE_RANK、LAG和LEAD函数、SUM和AVG的移动计算、RATIO_TO_REPORT报表处理函数以及FIRST和LAST取基数函数...