Oracle 窗口函数 实例操做 放大招

前言:

窗口函数的名字是over()函数,常用的有两个属性partition by和order by,partition by类似于group by,我们通常将group by叫做分组,而partition by称作分区,分组返回通常是一行,partition by返回的是多行。
窗口函数的威力是与其他函数联合使用,窗口函数主要和统计函数,排名函数,错行的函数联合使用.

1、row_number() over() 函数

为每条记录返回一个数字。

select sno,sname,ssex,row_number() over(order by sno desc ) 排名 from student;

Oracle  窗口函数  实例操做  放大招

select sno,sname,ssex,row_number() over(order by sno desc ) 排名 from student where sno = ‘109’;
2、row_number() over (partition by order by ) 结合使用
select sno,sname,ssex,sclass,row_number() over(partition by sclass order by sno desc ) rank from student;

Oracle  窗口函数  实例操做  放大招

3、 RANK()
rank 返回数据项在分组中的排名,排名相等会在名次中留下空位:
LAG:

lag ,lead 分别是向前,向后;
lag 和lead 有三个参数,第一个参数是列名,第二个参数是偏移的offset,第三个参数是 超出记录窗口时的默认值
LAG(column_name1,1) OVER(ORDER BY column_name2)
LEAG(column_name1,1) OVER(ORDER BY column_name2)

备注:超出记录窗口时的默认值其实就是自己定义数字,填充。

select sno,sname,ssex,lag(sclass,1,222)over(order by sclass desc) from student

Oracle  窗口函数  实例操做  放大招

没加记录超出默认值时的参数:如下

Oracle  窗口函数  实例操做  放大招

以上sclass括号内的1 加不加都是可以执行通的。

select sno,
sname,
ssex,
lead (sclass, 1) over(order by sclass desc) 对应班级号
from student order by sno desc;
Oracle  窗口函数  实例操做  放大招
 

 
 

总结:
注意:row_number含数前面的字段后是要加逗号的不然报错;因为本人老是忘记。
partition by:分组后的记录集合称为窗口。此处的窗口并非“窗户”的意思,而是代表范围。这也是窗口函数的由来。
通过PARTITION BY分组后的记录集合称为“窗口”。

● RANK函数
计算排序时,如果存在相同位次的记录,则会跳过之后的位次。
例)有 3 条记录排在第 1 位时:1 位、1 位、1 位、4 位……
● DENSE_RANK函数
同样是计算排序,即使存在相同位次的记录,也不会跳过之后的位次。
例)有 3 条记录排在第 1 位时:1 位、1 位、1 位、2 位……
● ROW_NUMBER函数
赋予唯一的连续位次。
例)有 3 条记录排在第 1 位时:1 位、2 位、3 位、4 位……

 
 

暂时就这么多,如果还有,我会在添加进来的。

【转载注明出处,尊重原创 】

 

【作者水平有限,如有错误欢迎指正 .】

Oracle  窗口函数  实例操做  放大招

上一篇:数据库


下一篇:FastDFS :java.lang.Exception: getStoreStorage fail, errno code: 28