oracle强大函数,Oracle分析函数

Oracle分析函数

发布时间:2020-07-16 08:51:13

来源:51CTO

阅读:711

作者:手不要乱摸

聚合函数可以在分析模式或非分析模式下来进行运算。非分析模式下的聚合函数将结果集削减为较少的数据行。然而,在分析模式下,聚合函数并不减少输出结果行数。并且,聚合函数能够在一行中同时取得聚合和非聚合的列。分析模式的聚合函数提供了不需要任何自连接就可以聚合不同层级数据的能力。

1. sum

a5fbd642c79021cf92efe9bd28944c31.png

可以把sum当做聚集函数来用,也可以当做分析函数来用

4d9dbab65f1ce2bfa5998ae0bb7f7856.png

6f1a3eeea9e17d948d69b3a1751d7ff7.png

ac6c19f0fcf133ced49e3075f66c3fbe.png

与前一个sql不同的是窗口的变化,这个例子中取的是开始行到当前行,即对当前行之前的行(包括当前行)求和

1f57844d6989d48f90f8c1970734c944.png

从结果中很容易理解sum分析函数

2. avg

bd1d1652061bb4f2816d62da54eb8882.png

和sum差不多,就不多说了

dcccefd8a9ab999898c9b4c982880f7e.png

0f5c0f06de33c06f9967b179826b670a.png

上面这两个语句是等价的,看看结果

dd4cb846d04ef3daec17c9f2dd0139d2.png

下面这个语句,每三行求一次平均(前,中,后)

b0b5275354578306780acd4e5a439aae.png

68d03cf67af82dfc9c005b33b114e7b4.png

3. lag

215178fe1db1675d77ebcf20ba9c5bee.png

lag提供一种方式访问当前位置的前面的行,默认offset是1,表示访问前一行

6bf00fb1cfb87fca3b8cc0a6a0ebb74b.png

4. lead

利用lead可以访问当前位置后面的行

2285fdea408be2da0e16be345ba3fb5e.png

0c436581148b35ac985ca1d29f2348b6.png

5. first_value和last_value

first_value取窗口中的第一个值,last_value取最后一个

76f1928fb65b1516724a3a544582cd96.png

6. rank

cf6b1a9235ba30d572d5590f6b4c2d66.png

1e00157c3a6d2b22d9e6537b60e03695.png

rank,意为排名、等级。

rank函数返回一个行的排名,值相等的行排名相同,排名是不连续的。对于top-N和bottom-N这样的操作来说,rank函数是很有用的。rank作为聚集函数时返回某一个假定值的排名,作为分析函数时返回每一行的排名。

a67bd245325676f3a8b233bf038b06a0.png

9740aa7c09fc31c2b49d7ce394c31b39.png

7. row_number

0835d670bfed21d0be52bc8b550f91e9.png

row_number是一个分析函数,它给每一行指定一个编号,编号从1开始。

这个函数可以实现top-N,bottom-N,inner-N这样的操作。

61703bfaffd805a2050523c609bd2398.png

ab125acf73a6bbb839dd633ffe6ed0db.png

注意也rownum伪列区分开,rownum对于每一行都返回一个数以表明被选中的顺序,比如1, 2……

8. listagg

0db27c89862d71aba98ee8b465059917.png

listagg函数用于列转行

作为一个单行聚集函数,listagg作用于所有行并返回单一的一行

作为一个分组聚集函数,listagg作用于每个组,并为每个组返回一行

作为一个分析函数,listagg基于查询分区字句将数据分区,并为每个分区中的每一行返回相同的结果

measure_expr,指定要操作的列或表达式

delimiter_expr,指定分隔符

order_by_clause,决定结果的顺序

63933c480abc7eb16c840afc5229eaf5.png

566a7c825b17877fb0d6a1b685e9d721.png

6db01f129cfd6bd1c54f0e6670562ca3.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值