`
clq9761
  • 浏览: 587965 次
  • 性别: 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开发笔记和小结;分析函数简述  ROW_NUMBER () OVER([partition_clause] order_by_clause) dense_rank在做排序时如果遇到列有重复值,则重复值所在行的序列值相同,而其后的序列值依旧递增,rank则是重复值...

    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...

    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 外部...

    Oracle_Database_11g完全参考手册.part2/3

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

    OCA认证考试指南1Z0-051

    1.6 认证小结 1.7 本章 测试题 1.7.1 自测题 1.7.2 实验题 1.7.3 自测题答案 1.7.4 实验题答案 第2章 使用SQLSELECT语句检索数据 2.1 列出SQLSELECT语句的性能 2.1.1 SQLSELECT语句介绍 2.1.2 ...

    (E文)基于成本的Oracle优化法则.pdf

    1.5 本章小结 8 1.6 测试用例 8 第2章 表扫描 9 2.1 入门 10 2.2 提高 14 2.2.1 块大小的影响 14 2.2.2 CPU成本计算 16 2.2.3 CPU成本计算的作用 22 2.3 BCHR 24 2.4 并行执行 27 2.5 索引快速全扫描 30 2.6 分区 32...

    SQL必知必会(第3版)--详细书签版

    2.5 小结 12 第3章 排序检索数据 13 3.1 排序数据 13 3.2 按多个列排序 15 3.3 按列位置排序 15 3.4 指定排序方向 16 3.5 小结 18 第4章 过滤数据 19 4.1 使用WHERE子句 19 4.2 WHERE子句操作符 20 4.2.1 ...

    SQL必知必会(第3版-PDF清晰版)part1

    1.4 小结..... 7 第2章 检索数据...... 8 2.1 SELECT语句..... 8 2.2 检索单个列..... 9 2.3 检索多个列..... 10 2.4 检索所有列..... 11 2.5 小结..... 12 第3章 排序检索数据...... 13 3.1 排序数据..... 13 3.2...

    轻松学C#(图解版)

    1.4 小结 11 1.5 习题 12 第二篇 面向对象基础篇 第2章 类和对象 16 2.1 分析Hello World程序 16 2.2 语法规范 17 2.2.1 标识符 17 2.2.2 关键字 18 2.2.3 注释 19 2.3 定义类 20 2.4 实例化对象 20 2.5 小结 20 ...

    精通sql结构化查询语句

    8.3.6 颠倒字符串的顺序 8.3.7 字符串替换 8.4 聚合函数 8.4.1 聚合函数概述 8.4.2 SUM函数运算 8.4.3 MAX函数运算 8.4.4 MIN函数运算 8.4.5 AVG函数运算 8.4.6 COUNT函数运算 8.4.7 聚合函数的组合使用 8.5 小结第9...

    精通SQL 结构化查询语言详解

    17.5 小结  第18章 事务控制与并发处理 18.1 SQL事务控制  18.1.1 事务控制的引入  18.1.2 事务的特性  18.1.3 SQL中与事务有关的语句  18.2 事务控制的具体实现 18.2.1 开始事务  18.2.2 SET ...

    精通SQL--结构化查询语言详解

    17.5 小结 372 第18章 事务控制与并发处理 373 18.1 sql事务控制 373 18.1.1 事务控制的引入 373 18.1.2 事务的特性 373 18.1.3 sql中与事务有关的语句 374 18.2 事务控制的具体实现 376 18.2.1 开始事务 376...

    疯狂JAVA讲义

    1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种基本结构 25 2.1.3 面向对象程序设计简介 27 2.1.4 面向对象的基本特征 28 2.2 UML...

Global site tag (gtag.js) - Google Analytics