分析函数

转载 2016年08月31日 09:02:46

OVER(PARTITION BY)函数介绍

开窗函数          
     Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。

      开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例如下:
1:over后的写法:    
   over(order by salary) 按照salary排序进行累计,order by是个默认的开窗函数
   over(partition by deptno)按照部门分区

 

   over(partition by deptno order by salary)

 

2:开窗的窗口范围
over(order by salary range between 5 preceding and 5 following):窗口范围为当前行数据幅度减5加5后的范围内的。

举例:

 

--sum(s)over(order by s range between 2 preceding and 2 following) 表示加2或2的范围内的求和

 select name,class,s, sum(s)over(order by s range between 2 preceding and 2 following) mm from t2
adf        3        45        45  --45加2减2即43到47,但是s在这个范围内只有45
asdf       3        55        55
cfe        2        74        74
3dd        3        78        158 --78在76到80范围内有78,80,求和得158
fda        1        80        158
gds        2        92        92
ffd        1        95        190
dss        1        95        190
ddd        3        99        198

gf         3        99        198

 

 

 

over(order by salary rows between 5 preceding and 5 following):窗口范围为当前行前后各移动5行。

举例:

 

--sum(s)over(order by s rows between 2 preceding and 2 following)表示在上下两行之间的范围内
select name,class,s, sum(s)over(order by s rows between 2 preceding and 2 following) mm from t2
adf        3        45        174  (45+55+74=174)
asdf       3        55        252   (45+55+74+78=252)
cfe        2        74        332    (74+55+45+78+80=332)
3dd        3        78        379    (78+74+55+80+92=379)
fda        1        80        419
gds        2        92        440
ffd        1        95        461
dss        1        95        480
ddd        3        99        388
gf         3        99        293

 

 

over(order by salary range between unbounded preceding and unbounded following)或者
over(order by salary rows between unbounded preceding and unbounded following):窗口不做限制

 

3、与over函数结合的几个函数介绍

row_number()over()、rank()over()和dense_rank()over()函数的使用

下面以班级成绩表t2来说明其应用

t2表信息如下:
cfe        2        74
dss        1        95
ffd        1        95
fda        1        80
gds        2        92
gf         3        99
ddd        3        99
adf        3        45
asdf       3        55
3dd        3        78

select * from                                                                      
    (                                       

Oracle的rownum和分析函数

racle的rownum字段是个比较奇怪的字段。拿一张有26条记录的Test表来举例。       select * from Test where rownum >=1;      select...
  • vebasan
  • vebasan
  • 2011年09月13日 11:54
  • 1550

mysql分析函数的实现(阿里DBA博客,大开眼界)

今天收到同事的一需求,要求实现以下功能: drop table test; create table test(name varchar(10),name1 varchar(10),cou...
  • jayxujia123
  • jayxujia123
  • 2014年10月18日 12:33
  • 1590

Mysql中模拟分析函数

[sql] view plain copySET @add_sal=0;    SELECT deptno, empno, ename, sal, @add_sal := @add_sal + sal...
  • lichangzai
  • lichangzai
  • 2017年02月14日 17:36
  • 511

[SQLServer2005] 分析函数 (又称窗口函数)

1.简介: SQL Server 2005中的窗口函数帮助你迅速查看不同级别的聚合,通过它可以非常方便地累计总数、移动平均值、以及执行其它计算。窗口函数功能非常强大,使用起来也十分容易。可以使用这个技...
  • xiaoxu0123
  • xiaoxu0123
  • 2010年01月03日 13:57
  • 5880

Oracle所有分析函数

Oracle分析函数   Oracle分析函数——函数列表   SUM        :该函数计算组中表达式的累积和 MIN        :在一个组中的数据窗口中查找表达式的最小值 MA...
  • fujiakai
  • fujiakai
  • 2016年04月05日 17:20
  • 13499

Oracle分析函数总结(1) - 基本概念和语法

Analytic functions compute an aggregate value based on a group of rows. They differ from aggregate f...
  • fw0124
  • fw0124
  • 2012年08月08日 16:43
  • 6552

oracle 分析函数

Oracle开发专题之:分析函数(OVER) 1 Oracle开发专题之:分析函数2(Rank,Dense_rank, row_number) 6 Oracle开发专题之:分析函数3(Top/Bo...
  • tanyit
  • tanyit
  • 2011年11月04日 22:27
  • 14060

Oracle分析函数ROW_NUMBER()|RANK()|LAG()使用详解

Oracle分析函数RANK()|ROW_NUMBER()|LAG()使用详解   ROW_NUMBER()函数: row_number()和rownum差不多,功能更强一点(可以在各个分组内从1...
  • haiross
  • haiross
  • 2013年11月01日 10:12
  • 2845

函数专题:分析函数 over

一、sum over     sum over主要用来对某个字段值进行逐步累加     SELECT   Name, Salary, SUM (Salary) OVER (ORDER BY Sala...
  • bbliutao
  • bbliutao
  • 2012年07月08日 21:48
  • 2159

分析函数排序

一、使用分析函数来为记录排名: Rank,Dense_Rank,Row_Number rank():主要用于排序,并给出序号。在排序后对相同的数据给予相同序号,接下来的序号直接跳跃 dense_...
  • pmhlove
  • pmhlove
  • 2013年01月15日 21:11
  • 580
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分析函数
举报原因:
原因补充:

(最多只允许输入30个字)