Oracle over() 函数的实际用法

以下的文章主要介绍的是Oracle over() 函数的实际用法,在一个网站上我无意中看见了这个函数,才对Oracle分析函数的相关内容有所了解,而且Oracle over() 函数的实际用法又尤为的特别,所以将自己的研究结果记录一下。

个人理解:over() 函数是对分析函数的一种条件解释,直接点就是 给分析函数加条件吧。

在网上看见比较常用的就是 与 sum()、rank() 函数使用。接下来就用分析下两种函数结合over的用法。

以下测试使用的orace默认的 scott用户下的emp表数据。

1.sum()结合Oracle over()

Sql代码

select a.empno as 员工编号

,a.ename as 员工姓名

,a.deptno as 部门编号

,a.sal as 薪酬

,sum(sal) over (partition by deptno) 按部门求薪酬总和

from scott.emp a;

此段sql 执行的结果为:

部门编号 员工姓名 员工编码 薪酬 按部门求薪酬总和

7934 MILLER 10 1300 8750

7782 CLARK 10 2450 8750

7839 KING 10 5000 8750

7369 SMITH 20 800 10875

7876 ADAMS 20 1100 10875

7566 JONES 20 2975 10875

7788 SCOTT 20 3000 10875

7902 FORD 20 3000 10875

7900 JAMES 30 950 9400

7654 MARTIN 30 1250 9400

7521 WARD 30 1250 9400

7844 TURNER 30 1500 9400

7499 ALLEN 30 1600 9400

7698 BLAKE 30 2850 9400

可以从结果上看到sum()函数对部门区分进行了求和统计。其中“partition by”官方点的说法叫做”分区”,其实就是统计的范围条件。

下面在给把上面的sql语句改造下 给 Oracle over() 函数加上 “order by sal” 会看到一个更过瘾的效果:

Sql代码

select a.empno as 员工编号

,a.ename as 员工姓名

,a.deptno as 部门编号

,a.sal as 薪酬

,sum(sal) over (partition by deptno) 按部门求薪酬总和

,sum(sal) over (partition by deptno order by sal) 按部门累计薪酬

from scott.emp a;

结果为:

部门编号 员工姓名 员工编码 薪酬 按部门求薪酬总和 按部门累计薪酬

7934 MILLER 10 1300 8750 1300

7782 CLARK 10 2450 8750 3750

7839 KING 10 5000 8750 8750

7369 SMITH 20 800 10875 800

7876 ADAMS 20 1100 10875 1900

7566 JONES 20 2975 10875 4875

7788 SCOTT 20 3000 10875 10875

7902 FORD 20 3000 10875 10875

7900 JAMES 30 950 9400 950

7654 MARTIN 30 1250 9400 3450

7521 WARD 30 1250 9400 3450

7844 TURNER 30 1500 9400 4950

7499 ALLEN 30 1600 9400 6550

7698 BLAKE 30 2850 9400 9400

从结果中可以看的 加了 “order by”后对 统计进行一个累加,这里个人理解为对统计范围规定了个统计顺利,一步一步的统计。

注:此sql语句结尾处不要加“order by”,应为使用的分析函数的(partition by deptno order by sal)

里已经有排序的语句了,如果再在句尾添加排序子句,一致倒罢了,不一致,结果就令人费解了。

2.rank()结合Oracle over()

rank函数是分级函数,这个函数必须与 over 函数使用,否则会报一个”缺少窗口函数的错”。我测试sql如下:

Sql代码

select a.empno as 员工编号,

a.sal as 薪资,

a.job as 岗位,

rank() OVER(partition by a.job ORDER BY a.sal desc) as 岗位薪资等级

from scott.emp a;

查询结果为:

员工编号 薪资 岗位 等级

7902 3000 ANALYST 1

7788 3000 ANALYST 1

7934 1300 CLERK 1

7876 1100 CLERK 2

7900 950 CLERK 3

7369 800 CLERK 4

7566 2975 MANAGER 1

7698 2850 MANAGER 2

7782 2450 MANAGER 3

7839 5000 PRESIDENT 1

7499 1600 SALESMAN 1

7844 1500 SALESMAN 2

7654 1250 SALESMAN 3

7521 1250 SALESMAN 3

【编辑推荐】

  1. Oracle数据库与Access互导实例
  2. Oracle 11g R2数据卫士的增强特性表现
  3. Oracle Redo的并行机制运行中要用到的代码
  4. Oracle提高SQL的执行效率的3种好用方法
  5. Oracle临时表用法的经验心得

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/306614.html<

(0)
管理的头像管理
上一篇2025-05-26 18:02
下一篇 2025-05-26 18:04

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注