`
clq9761
  • 浏览: 590992 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

Oracle分组函数小结

阅读更多

Oracle分组函数小结

 

1.OVER (PARTITION BY ..)

例:select a,b,c, sum(c)  OVER (PARTITION BY b) sum_c

b列值相同的行进行c值的累计.

 

-- 检索指定的零售户类型个数所占的百分比

select t2.*,round(t2.cust_count/t2.cust_count_all,3)*100 as count_percent from(

  select t.*,

  sum(cust_count) over (partition by t.regie_org_code,t.analysis_month)

  as cust_count_all

  from(

    select r.regie_org_code,r.analysis_month,r.cust_type,

    count(*) as cust_count

    from rm_monitor_results r

group by r.regie_org_code,r.analysis_month,r.cust_type) t)t2

 

2.按照区间进行分组

 

select

sum(case when abs(r.sample_z_value)>=3 then 1 else 0 end) as p3,

sum(case when abs(r.sample_z_value)>=2 then 1 else 0 end) as p2,

sum(case when abs(r.sample_z_value)<2  then 1 else 0 end) as p1,

sum(1) as p0

from Rm_Monitor_Statistics_Analysis r

where r.regie_org_code='13500401'

 

3.ROLLUP

ROLLUP是对group by的扩展,因此,它只能出现在group by子句中,依赖于分组的列,对每个分组会生成汇总数据, rollupgroup by联合一起使用,达到了按group by列顺序分组,并且实现小计和合计的功能。rollup分组还是有序的,先全部分组,然后对每个分组小计,最后合计,使处理结果更清楚.

rollup中列的顺序不同,则统计的结果不同。因为它是按列从右递减分组的。

例:

--对不同专卖局的不同月份进行分组小计和合计

select r.regie_org_code,r.year_month,count(*)

from rm_monitor_statistics_analysis  r

group by rollup (r.regie_org_code,r.year_month)

 

如果在实际查询中,有的小计或合计我们不需要,那么就要使用局部rollup,局部rollup就是将不需要小计(合计)的列放在group by中,而不是放在rollup中。

 

例:

--对不同专卖局不同月份进行分组统计并只对局进行合计

select r.regie_org_code,r.year_month,count(*)

from rm_monitor_statistics_analysis  r

group by rollup (r.regie_org_code),r.year_month

 

4.CUBE

CUBE(交叉列表)也是对group by运算的一种扩展,它比rollup扩展更加精细,组合类型更多,rollup是按组合的列从右到左递减分组计算,而CUBE则是对所有可能的组合情况进行分组,这样分组的情况更多,覆盖所有的可能分组,并计算所有可能的分组的小计。

 

对于CUBE来说,列的名字只要一样,那么顺序无所谓,结果都是一样的,因为cube是各种可能情况的组合,只不过统计的结果顺序不同而已。但是对于rollup来说,列的顺序不同,则结果不同。

 

例:

--对不同专卖局和不同月份进行两两交叉统计

select r.regie_org_code,r.year_month,count(*)

from rm_monitor_statistics_analysis  r

group by cube (r.regie_org_code,r.year_month)

 

部分CUBE和部分ROLLUP类似,把不想要的小计和合计的列放到group by中,不放到cube中就可以了。

如果cube中只有一个列,那么和rollup的结果一致

例:

select r.regie_org_code,r.year_month,count(*)

from rm_monitor_statistics_analysis  r

group by cube (r.regie_org_code),r.year_month

 

5.GROUPING SETS

group by的另一个扩展,专门对分组列分别进行小计计算,不包括合计。使用方式和rollupcube一样,都是放在group by中。

 

--对不同专卖局,不同月份每个列分别进行小计计算,改变统计列的顺序,不影响统计结果。

select r.regie_org_code,r.year_month,count(*)

from rm_monitor_statistics_analysis  r

group by grouping sets (r.regie_org_code,r.year_month)

 

6.删除重复记录

例:

delete from emp e where e.rowid > (select min(y.rowid)

from emp y

where y.empno = e.empno )

 

7.其它性能优化

(1)SELECT子句中避免使用 ‘ * ‘
(2)
:使用exists语句代替in语句;

(3):   
使用not exists代替
not in
(4)
:使用truncate代替delete from 表语句

(5)
:减少访问数据库的次数

(6)
:使用表的别名
(Alias)
(7)
:尽快使用
COMMIT
(8)
:数据库冗余字段的设计

 

分享到:
评论
2 楼 gg9088 2014-10-21  
膜拜
1 楼 ouxiang08 2012-12-10  

相关推荐

    转帖--oracle分析函数+PLSQL小结

    分析函数与聚合函数(如SUM, AVG, COUNT等)类似,但有显著的区别:聚合函数通常会忽略分组之外的其他行,而分析函数则允许我们在不丢失其他行信息的情况下对数据进行计算。这种功能在处理复杂的数据分析和报表生成...

    ORACLE 常用分析函数

    PLSQL开发笔记和小结;分析函数简述  ROW_NUMBER () OVER([partition_clause] order_by_clause) dense_rank在做排序时如果遇到列有重复值,则重复值所在行的序列值相同,而其后的序列值依旧递增,rank则是重复值...

    oracle分析函数全面解析

    PLSQL开发笔记和小结** 在PL/SQL编程中,分析函数可以与其他PLSQL构造结合使用,如游标、存储过程和触发器,以实现更复杂的业务逻辑和数据处理。 **6. 分析函数简述** 分析函数的强大之处在于其灵活性和可扩展性...

    oracle分析函数.doc

    7. **PLSQL开发笔记和小结** - PL/SQL是Oracle数据库的编程语言,与分析函数紧密相连,用于编写存储过程、触发器等数据库逻辑。 - 在PLSQL中使用分析函数可以增强业务逻辑的复杂性,同时保持代码的简洁性和可维护...

    oracle分析函数指南

    6. **PLSQL开发笔记和小结** 在PL/SQL编程中,分析函数同样适用,可以嵌入到存储过程、函数和触发器中,增强业务逻辑的处理能力。 7. **分析函数简述** Oracle提供了26个内置的分析函数,包括`AVG()`, `COUNT()`,...

    韩顺平玩转oracle学习小结

    ### 韩顺平玩转Oracle学习小结 #### 1. Oracle基础介绍 ##### 1.1 基本概念 **实例**: 在Oracle中,“实例”指的是数据库中的相关进程被启动并加载到内存中形成的一个整体。这些进程协同工作以支持数据库的正常...

    深入浅出oracle分析函数(全)

    7. **PLSQL开发笔记和小结**: 在PLSQL编程中,分析函数的应用可以提高代码的效率和可读性,同时减少临时表和子查询的使用。理解并熟练掌握这些函数是成为高效Oracle数据库开发者的关键。 8. **分析函数简述**: ...

    oracle小结

    本文将基于给定的"Oracle小结"内容,对Oracle数据库的基础知识进行深入解析,特别关注如何使用SQL查询来解决实际问题。 首先,我们要理解Oracle数据库中的基本概念。在示例中涉及到的两个关键表格——Emp和Dept,...

    Oracle SQL高级编程

    1.10 小结 24 第2章 SQL执行 25 2.1 Oracle架构基础 25 2.2 SGA-共享池 27 2.3 库高速缓存 28 2.4 完全相同的语句 29 2.5 SGA-缓冲区缓存 32 2.6 查询转换 35 2.7 视图合并 36 2.8 子查询解嵌套 39 2.9 谓语前推 42...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    1.10 小结 24 第2章 SQL执行 25 2.1 Oracle架构基础 25 2.2 SGA-共享池 27 2.3 库高速缓存 28 2.4 完全相同的语句 29 2.5 SGA-缓冲区缓存 32 2.6 查询转换 35 2.7 视图合并 36 2.8 子查询解嵌套 39 2.9 ...

    ORACLE11G宝典.rar 是光盘里面的内容,书太厚咧没法影印啊

     1.6 小结  第2章使用SQL*Plus工具  2.1 启动、退出SQL*Plus  2.1.1启动、退出SQL*Plus  2.1.2 设置操作界面风格  2.1.3 获取SQL*Plus命令的帮助  2.2 编辑、运行语句和命令  2.3 DESCRIBE命令  2.4...

    45个非常有用的 Oracle 查询语句小结

    除了上述示例,Oracle查询语句还包括但不限于聚合函数(如COUNT, SUM, AVG, MAX, MIN),连接查询(JOIN),子查询,分组(GROUP BY)和排序(ORDER BY)等。熟练掌握这些查询技巧,能够极大地提高数据处理的效率,...

    Oracle_Database_11g完全参考手册.part3/3

    12.4.3 对列和分组函数进行排序 12.4.4 连接列 12.5 更多分组可能性 第13章 当一个查询依赖于另一个查询时 13.1 高级子查询 13.1.1 相关子查询 13.1.2 并列的逻辑测试 13.1.3 EXISTS及其相关子查询的使用 13.2 外部...

Global site tag (gtag.js) - Google Analytics