Oracle中窗口函数over()的学习

Oracle中窗口函数over()的学习

       近一个月没有写博客了,今天学习了一下Oracle中窗口函数的使用,所以将自己的学习心得分享给大家。

        使用窗口函数可以解决一些问题。比如说如果我们有两张表,一张教师的表,一张系的表,如果我们想查询每个系的老师的平均工资,这当然没什么问题,但是如果加上同时把老师的信息查询出来,那么就麻烦了,我们需要将每个系的老师的平均工资看成一张临时表,来和原先的老师的表进行连接查询;或者说查询每个系工资最高的老师的信息,有些的时候,像这种分组的,多表的,统计的,经常涉及查询每个查询的具体信息,写的时候增加了我们的难度,如果使用窗口函数,再配合一些其他的函数使用,很简单的就可以解决这个问题。

有时候查询,我们需要将我们的结果显示在每条记录里,oracle中的这个窗口函数就可以解决这个问题。

窗口函数的名字是over()函数,常用的有两个属性partition byorder bypartition by类似于group by,我们通常将group by叫做分组,而partition by称作分区,分组返回通常是一行,partition by返回的是多行。

如果将Oracle中的这个over()函数和其他的函数联合使用将会发挥更大的作用,比如最值的问题,获取其他行的数据等。

1、和统计函数(聚合函数)使用

可以和count() sum() avg() min() max()这些函数使用,这样在查询市,还可以显示每条记录的信息,比如说查询每个系的老师的平均工资和老师的信息,如图所示:

2、和排名函数使用

有时在后台查询数据库时,需要向前台那样显示序号,oracle提供了三个函数,搭配over()函数更有用。如图所示:

3、和错行的函数使用

Oracle中有两个类似于错行的行数,在本行可以取到其他行的数据。lead 函数和lag函数。如图所示:

4、取最值的函数first_value()

通过和该函数的联合使用,可以解决最值问题。常用的有两外的属性值。

无论是那种方式都会在查询的记录上添加一列的信息,有时候需要这种需求,使用这个函数还可以解决使用group by时,只能查询分组的字段值的问题。

引用提到了Oracle窗口函数窗口函数是一种用于查询和计算的特殊函数。它可以和其他函数(如统计函数、排名函数、错行函数)联合使用,能够在一次查询进行多步计算。窗口函数的常用属性是partition by和order by,其partition by类似于group by,用于将结果分成不同的分区,而order by用于指定排序的顺序。 引用给出了一个使用窗口函数的例子,查询每个同学单科成绩和班级相应单科成绩的差值。使用窗口函数可以简化这个查询,代码如下: ```sql select t.*, (t.score-avg(t.score) over( partition by t.subject_id)) as gaps from test_student_score t ``` 这个查询使用了over函数和partition by子句来计算每个同学单科成绩和班级相应单科成绩的差值。 引用展示了另一个常用的窗口函数示例,用于去重。这个查询使用了row_number()函数配合over函数和partition by子句来对数据进行编号,并筛选出每个分组的第一行数据。 总结来说,Oracle窗口函数是一种强大的工具,可以简化复杂的查询和计算,常用的属性有partition by和order by。它可以和其他函数联合使用,可以满足各种数据分析和计算的需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Oracle窗口函数](https://blog.csdn.net/wyqwilliam/article/details/82555712)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [oracle的分组排序函数(窗口函数)](https://blog.csdn.net/m0_46636892/article/details/122984409)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值