无名扫把

扫地不过是我表面上的工作,我真正的身份其实是无名老僧-----------手里那根扫把~~~~...

ORACLE函数介绍第五篇 分析函数简述
 

注:N表示数字型,C表示字符型,D表示日期型,[]表示内中参数可被忽略,fmt表示格式。

  分析函数计算基于group by的列,分组查询出的行被称为"比照(window)",在根据over()执行过程中,针对每一行都会重新定义比照。比照为"当前行(current row)"确定执行计算的行的范围。这点一定要理解清楚。它是分析函数生成数据的原理。如果此处模糊,那么你在应用分析函数时恐就不会那么得心应手了。

  分析函数与前面章节中讲到的聚合函数非常相似,不同于聚合函数的地方在于它们每个分组序列均返回多行。在本节示例中会同时应用两种函数做对比,以更好体现二者的差异。通过本章节练习相信大家就会注意到,部分聚合函数和分析函数是同一个命令,事实确实如此。如果从语法格式上区分的话,没加over()的即是聚合函数,加了over()即是分析函数:)

  有一点需要注意哟,除了order by子句的运算外,分析函数在SQL语句中将会最后执行。因此,分析函数只能应用于select的列或order by子句中(记住喽,千万别扔到什么where、group by、having之类的地方了)。也正因此,同名的函数在做为聚合函数和分析函数时得出的结果可能不相同,就是因为此处运算逻辑不同造成的。

  同时,部分分析函数在选择列时支持distinct,如果你指定了该参数,则over条件中就只能指定partition子句,而不能再指定order by 子句了。

  分析函数的语法结构比较复杂,但多数函数都具有相同的语法结构,所以先在之前进行统一介绍,后续单个函数介绍时就不过多说明函数语法结构了。

  基本上所有的分析函数均是这种格式:

  函数名称 ([参数]) OVER (analytic_clause)

analytic_clause包含:[partition 子句][ order 子句 [window子句]]

Partition 子句:Partition by exp1[ ,exp2]...

Partition没啥说的,功能强大参数少,主要用于分组,可以理解成select中的group by。不过它跟select语句后跟的group by 子句并不冲突。

Order子句:Order by exp1[asc|desc] [ ,exp2 [asc|desc]]... [nulls first|last]。部分函数支持window子句。

Order by的参数基本与select中的order by相同。大家按那个理解就是了。Nulls first|last是用来限定nulls在分组序列中的所在位置的,我们知道oracle中对于null的定义是未知,所以默认ordery的时候nulls总会被排在最前面。如果想控制值为null的列的话呢,nulls first|last参数就能派上用场了。

Window子句:En,贴个图吧

 

   看起来复杂其实简单,而且应用的机率相当的低,不详细介绍了。

 
阅读更多
文章标签: oracle null sql c
个人分类: 笔记
想对作者说点什么? 我来说一句

ORACLE函数介绍 全系列中文

2013年11月01日 1.02MB 下载

oracle 内部常用函数大全

2009年02月02日 89KB 下载

ORACLE函数介绍

2010年11月07日 233KB 下载

三思笔记之oracle函数

2011年03月22日 4.66MB 下载

oracle函数

2012年12月03日 107KB 下载

没有更多推荐了,返回首页

不良信息举报

ORACLE函数介绍第五篇 分析函数简述

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭