在泡坛子的时候中无意中发现了这个函数,才知道oracle分析函数是如此的强大,其中over() 函数的用法又尤为的特别,所以将自己的研究结果记录一下。

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

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

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

  1.sum()结合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语句改造下 给 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()结合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

SQL中over的用法相关推荐

  1. SQL中Truncate的用法

    转自:https://www.cnblogs.com/zhoufangcheng04050227/p/7991759.html 本文导读:删除表中的数据的方法有delete,truncate, 其中T ...

  2. 【SQL中limit的用法】

    SQL中limit的用法 说明:limit子句用于限制查询结果返回的数量,常用于分页查询. 用法:[select * from tableName limit i,n ] 参数:tableName: ...

  3. sql去重复操作详解SQL中distinct的用法

    在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值.关键词 distinct用于返回唯一不同的值. 表A: 表B: 1.作用于单列 select dist ...

  4. SQL中的limit用法

    limit用法 SQL中的limit函数是用来对数据库中的字段进行限制提取的,如:一个用户表中有许多的用户信息,如果想要取出其中某个位置的某几条数据,就可以使用limit函数. 结构 limit函数结 ...

  5. 教你学会Sql中 ROW_NUMBER的用法

    ROW_NUMBER SqlServer 2005 推出的新功能.语法:select *,ROW_Number() over(order by 字段) as '新列名' from table顾名思义: ...

  6. SQL中Case语句用法讨论

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...

  7. SQL中的declare用法

     平时写SQL查询.存储过程都是凭着感觉来,没有探究过SQL的具体语法,一直都是按c#那一套往SQL上模仿,前几天项目中碰到一个问题引起了我对declare定义变量的作用域的兴趣. 大家都知道c# ...

  8. SQL中CONVERT()函数用法详解

    SQL中CONVERT函数格式: CONVERT(data_type,expression[,style]) 参数说明: expression 是任何有效的 Microsoft® SQL Server ...

  9. SQL中with as用法

    WITH AS短语,也叫做子查询部分,定义一个SQL片断后,该SQL片断可以被整个SQL语句所用到.有的时候,with as是为了提高SQL语句的可读性,减少嵌套冗余. with A as (sele ...

  10. mysql中groupby用法_详解SQL中GroupBy的用法

    GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组. 1.概述 "Group By"从字面意义上理解就是根据"By"指定的规则对数据进行分 ...

最新文章

  1. hdu2438 三分
  2. 【BZOJ】 2463 [中山市选2009]谁能赢呢?(博弈论)
  3. Struts2的ResultType和Action处理链
  4. P4026-[SHOI2008]循环的债务【dp】
  5. springboot使用mybatis_使用springboot+mybatis数据库存储服务化
  6. 数列分块入门 6(LibreOj-6282)
  7. 删除oracle的注册,oracle数据库账号删除oracle收集系统统计信息
  8. Ubuntu通过vnc连接Windows主机的问题解决
  9. PHP—通过HTML网页请求,PHP页面显示源码不能解析
  10. 【Java SE】static成员及代码块
  11. 智能合约语言 Solidity 教程系列8 - Solidity API 1
  12. 单片机之矩阵键盘(花样编程)
  13. 微信公众号实现消息模板的推送
  14. android恢复出厂设置流程图,Android recovery模式
  15. 手动实现循环神经网络RNN,神经网络rnn是什么意思
  16. 微信后台 phxrpc (v0.8) 之 Timer(二)
  17. 从程序员的角度分析微信小程序(编程语言:用到什么学什么)
  18. 板内盘中孔设计狂飙,细密间距线路中招
  19. 试用python库meteva(气象行业)
  20. 浩鲸新智能解决方案工程师面试_【远景能源科技解决方案工程师面试】远景能源车轮战,一天几乎全部面完-看准网...

热门文章

  1. 程序员需要常用到的几大工具,省事高效
  2. VMware安装windows XP OS 虚拟机时常见的问题
  3. 5G+AI时代下,机器人将迎来怎样的产业未来?
  4. [Luogu2915] [USACO08Nov,Gold] Mixed Up Cows [状态压缩][dp]
  5. 手把手教你如何搭建web静态网站
  6. TMS320C28x的中断
  7. Promise初体验
  8. 蘑菇街API:item_search - 按关键字搜索mogujie商品
  9. 小厨餐饮加盟有什么优势
  10. Stochastic Latent Actor-Critic: Deep Reinforcement Learning with a Latent Variable Model