暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

不常用,但是很用于的函数。

自学Oracle 2019-01-31
885

窗口函数

1、语法

<窗口函数> over([partition by <列清单>]order by <排序用列清单>);

2、实例

--rank 是用来计算记录排序的函数。

select paperid,username,rank() over(partition by username order by mark asc) as ranking from zeanswer;

rank:计算排序时,如果存在相同位次的记录,则会跳过之后的位次。

dense_rank:同样是计算排序,即使存在相同位次的记录,也不会跳过之后的位次。

row_number:赋予唯一的连续位次。


分析函数

1、rollup  同时得出合计和小计

对数据库表emp。如果当中两个字段名为a,b,c。假设使用group by rollup(a,b),首先会对(a,b)进行group by ,然后对 a 进行 group by 。最后对全表进行 group by 操作。

2、cube  分组原则:GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A,B),(A,C),(A),(B,C),(B),(C),最后对全表进行GROUP BY操作。 

3、grouping sets  其实grouping sets就是由多个group by联合起来。

4、grouping( ) 函数用来区分NULL值,这里NULL值有2种情况,一是原本表中的数据就为NULL,二是由rollup、cube、grouping sets生成的NULL值。

  当为第一种情况中的空值时,grouping(NULL)返回0;当为第二种情况中的空值时,grouping(NULL)返回1。实例如下,从结果中可以看到第二个结果集中原本为null的数据由于grouping函数为1,故显示ROLLUP-NULL字符串。

5、grouping_id( )函数也是计算分组级别的函数

注意如果要使用grouping_id函数那必须得有group by字句,而且group by字句的中的列与grouping_id函数的参数必须相等。比如group by A,B,那么必须使用grouping_id(A,B)。下面用一个等效关系来说明grouping_id()与grouping()的联系,grouping_id(A, B)等效于grouping(A) + grouping(B),但要注意这里的+号不是算术相加,它表示的是二进制数据组合在一起,比如grouping(A)=1,grouping(B)=1,那么grouping_id(A, B)=11B,也就是十进制数3。原来的表数据执行下面的sql语句结果太多效果不明显,所以我改了下表数据,不过对比两个结果集效果很明显。

6、group_id()唯一标识反复组,能够通过group_id去除反复组


本公众号是个人学习工作笔记,希望大家发现问题能及时和我本人沟通,希望你与我共同成长。个人微信zgjt12306。


 

欢迎关注“自学Oracle”


文章转载自自学Oracle,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论