问题5
求按登记注册类型多个层次划分的单位个数小计和总计
例如要得出如下的结果:
代码
登记注册类型
家数
------ ---------------------------------------
---------
100
内资企业
61920
110
国有企业
1365
140
联营企业
476
141
国有联营企业
52
...
200
港、澳、台商投资企业
9004
210
合资经营企业(港或澳、台资)
4454
220
合作经营企业(港或澳、台资)
556
300
外商投资企业
11396
310
中外合资经营企业
5070
320
中外合作经营企业
663
我们有3种方法,都可以完成任务。
方法1
select code 代码 , substrb('
',1,item_level*2-2)||b.reg_type 登记注册类型, cnt 家数
from
(
(select substr(z01_08,1,1)||'00' code ,count(*)
cnt
from cj601
group by substr(z01_08,1,1))
union
(select substr(z01_08,1,2)||'0' code ,count(*)
cnt
from cj601
group by substr(z01_08,1,2))
union
(select substr(z01_08,1,3) code ,count(*)
cnt
from cj601
group by substr(z01_08,1,3))
)
c, djzclx b where c.code=b.reg_code;
方法2
select code 代码 , substrb('
',1,item_level*2-2)||b.reg_type 登记注册类型, cnt 家数
from
(
select
case when code3 is not null then
code3
when code2<>'0' then code2
else code1
end code,cnt from (
select substr(z01_08,1,1)||'00' code1 , substr(z01_08,1,2)||'0'
code2 , substr(z01_08,1,3) code3 ,count(*) cnt
from
cj601
group by
rollup(substr(z01_08,1,1),substr(z01_08,1,2),substr(z01_08,1,3))
) where code2<>code3 or code3 is null and
code1<>'00'
)
c, djzclx b where c.code=b.reg_code
order by 1
;
方法3
select code 代码 , substrb('
',1,item_level*2-2)||b.reg_type 登记注册类型, cnt 家数
from
(
select
case when code3 is not null then
code3
when code2<>'0' then code2
else code1
end code,cnt from (
select substr(z01_08,1,1)||'00' code1 , substr(z01_08,1,2)||'0'
code2 , substr(z01_08,1,3) code3 ,sum(cnt) cnt
from
(select substr(z01_08,1,3) z01_08,count(*) cnt from cj601 group by
substr(z01_08,1,3))
group by
rollup(substr(z01_08,1,1),substr(z01_08,1,2),substr(z01_08,1,3))
) where code2<>code3 or code3 is null and
code1<>'00'
)
c, djzclx b where c.code=b.reg_code
order by 1
;
上述3种写法都能得出正确的结果,但执行效率有巨大差别,第一种写法最简单,但是使用union要对cj601作了3遍全表扫描,执行效率最低,第2种写法对cj601做rollup分组,让数据库自动求小计和总计,第3种写法先对cj601做分组汇总,对结果集再做rollup分组,让数据库求小计和总计,在数据量中等的时候效率差不多,数据量大的时候,方法3效率更好些,因为rollup分组要处理的记录数更少,而rollup分组比普通分组开销大一些。
Oracle提供的分析函数一共有10多个,但有些专门的统计函数比如求标准差,相关系数,协方差等我们一般用不到,主要用到的是本文提到的RANK,
lead,
ratio_to_report等,我们如果能够将它们和decode函数,case语句配合,善加利用,就能编写出执行效率高的汇总语句,高效完成统计数据处理任务。更加详细的关于分析函数的信息,请参考资料Oracle9i
Data Warehousing Guide 第19章SQL for Analysis in Data
Warehouses。
分享到:
相关推荐
### Oracle内置SQL函数-分类整理大全 #### F.1 字符函数——返回字符值 **1.1.1 CHR** - **语法**: `CHR(x)` - **功能**: 返回在数据库字符集中与`x`拥有等价数值的字符。`CHR`和`ASCII`是一对反函数,即经过`CHR...
本文将深入探讨Oracle内置的SQL函数,这些函数极大地丰富了数据查询、处理和分析的能力。 一、数学函数 Oracle提供了丰富的数学函数,如ROUND、TRUNC、MOD、SQRT等。ROUND用于四舍五入,例如ROUND(123.456, 2)将...
Oracle数据库系统是世界上最广泛使用的数据库管理...通过熟练掌握这些Oracle内置的SQL函数,开发者可以更高效地处理和管理数据库中的数据。在sqlplus环境中,可以编写脚本文件并执行,实现自动化操作,提高工作效率。
Oracle分析函数是数据库查询中的重要工具,主要用于处理复杂的聚合和排序操作,特别是在OLAP(在线分析处理)系统中,它们能够高效地进行数据汇总和分析。分析函数与聚合函数(如SUM, AVG, COUNT等)有所不同,聚合...
### Oracle 最全函数大全 #### 一、总体介绍 ...分析函数特别适合处理复杂的数据分析任务,而聚合函数则是进行统计分析的基础。掌握这些函数能够帮助开发人员更加高效地管理和操作数据库中的数据。
Oracle数据库系统是世界上最广泛使用的数据库管理系统之一,其强大的功能和高效的数据处理能力离不开丰富的内置函数。这些函数在SQL查询、数据处理、计算以及各种复杂的业务逻辑中起着至关重要的作用。下面将详细...
5. "oracle函数介绍(6) 著名函数之分析函数.doc"和"oracle函数介绍(7) 非著名函数之分析函数.doc"会进一步详细讨论这些高级函数,可能包括窗口函数的用法和实例。 6. "oracle函数介绍(8) 综述.doc"应该是对前面所有...
6. **分析函数**:分析函数在处理大量数据时非常有用,如`RANK`、`DENSE_RANK`和`ROW_NUMBER`用于生成行序号,`LEAD`和`LAG`可以访问当前行的前一行或后一行数据,`FIRST_VALUE`和`LAST_VALUE`则用于获取分组内第一...
**聚组函数**如`COUNT`、`SUM`、`AVG`、`MAX`和`MIN`用于对一组数据进行统计汇总。它们常在SQL查询的`GROUP BY`语句中使用,帮助我们快速获取每个分组的计数、总和、平均值、最大值和最小值。 **分析函数**如`RANK`...
Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和丰富的内置函数使得数据处理变得高效而灵活。本篇文章将深入探讨“Oracle常见函数集锦”,主要关注在SQL查询中常用的Oracle函数,这些函数对于数据...
Oracle数据库系统是世界上最广泛使用的数据库管理系统之一,它提供了丰富的内置函数来支持各种数据处理和查询需求。本资源“oracle函数大全(chm格式分类显示)”详细介绍了Oracle中的主要函数类别,帮助用户更好地...
本文档将详细介绍一系列Oracle函数及其应用场景,帮助用户更好地理解和掌握如何利用这些函数进行高效的数据处理。 #### 二、字符串函数 1. **ASCII**: 返回字符的ASCII码。 - 示例:`ASCII('A')` 返回65。 2. **...
### Oracle函数大全——深入解析分析函数 #### 一、引言 在数据库开发过程中,熟练掌握各种函数的应用能够显著提高工作效率。Oracle作为一种广泛使用的数据库管理系统,提供了丰富的内置函数以满足不同场景的需求。...
7. **分组和分析函数**: - `GROUP BY`:根据一个或多个列对结果集进行分组。 - `ROLLUP`:创建分组的多级汇总。 - `CUBE`:生成所有可能的子集组合。 8. **连接查询相关函数**: - `JOIN`:将两个或更多表的...
在数据分析中,`COUNT()`、`SUM()`、`AVG()`、`MAX()`和`MIN()`等聚合函数用于对一组值进行统计汇总。它们在报表和数据分析中扮演着重要角色。 七、分组和排序函数 `GROUP BY`语句配合聚合函数用于对数据进行分组,...
9. 分组和分析函数:如GROUP BY、ROLLUP、CUBE和RANK等,用于数据的分组汇总和复杂分析,是大数据处理和OLAP操作的关键。 10. 连接函数:如CONNECT_BY_ROOT和START_WITH,用于构建复杂的树状查询,处理层次结构数据...
6. **分组和分析函数**: - `GROUP BY`: 用于对数据进行分组。 - `ROLLUP()`: 生成多级汇总。 - `CUBE()`: 生成所有可能的子集组合。 - `RANK()`, `DENSE_RANK()`, `ROW_NUMBER()`: 用于排序和生成行号。 7. **...
在Oracle数据库中,SQL函数被广泛应用于各种数据处理需求,例如数据筛选、计算汇总、格式化等。本文将详细介绍Oracle中的常见函数及其应用场景,帮助用户更好地理解和掌握这些实用工具。 #### 一、基本统计函数 1....
教程详细介绍了如何使用这些函数进行数据汇总,理解数据的统计特性。 多表查询章节则讲解了JOIN操作,包括内连接、外连接和自连接,以及如何使用子查询来实现更复杂的查询逻辑。这部分内容对于处理多源数据和复杂...