Oracle的分析函数

Oracle的分析函数row_number(),rank(),dense_rank()的用法与区别

比如查询工资排名第7的员工信息,可以用分析函数来做。

--查询工资排名第7的员工信息select *  from (select emp.*, rank() over(order by sal desc) rank from emp) where rank = 7; select *  from (select emp.*, dense_rank() over(order by sal desc) dr from emp) where dr = 7; select *  from (select emp.*, row_number() over(order by sal desc) rn from emp) where rn = 7;

但他们的用法还是有区别的,这3个函数的唯一区别在于当碰到相同数据时的排名策略。

①ROW_NUMBER:

Row_number函数返回一个唯一的值,当碰到相同数据时,排名按照记录集中记录的顺序依次递增。

②DENSE_RANK:
Dense_rank函数返回一个唯一的值,除非当碰到相同数据时,此时所有相同数据的排名都是一样的。

③RANK:
Rank函数返回一个唯一的值,除非遇到相同的数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。

依次贴图说明:

    

从图中可以看出,rownum遇到的数据无论是否相同,都按照顺序排序;dense_rank当遇到相同数据时,相同数据的排名是相同的,但会空出相应的排名;rank遇到相同的数据时,相同的数据排名相同,且不会空出相应的排名。

over()函数不能单独使用,必须和分析函数或者聚合函数一起使用

例如员工表中分部门进行排序

select ename,
       deptno,
       dense_rank() over(partition by deptno order by sal) dr
  from emp;

over函数和sum函数一起使用可以实现连续求和

select ename,
       deptno,
       sal,
       sum(sal) over(partition by deptno order by ename) part_sum
  from emp;

over()函数是一个窗口说明函数,用来说明前面所接函数的限制条件,如果over函数中无条件,则求的是所有员工的工资总和

select ename,
       deptno,
       sal,
       sum(sal) over()
  from emp;

原文地址:https://www.cnblogs.com/afel/p/9263859.html

时间: 2024-10-16 00:05:24

Oracle的分析函数的相关文章

Oracle 10gR2分析函数

Oracle 10gR2分析函数汇总 (Translated By caizhuoyi 2008‐9‐19) 说明:  1. 原文中底色为黄的部分翻译存在商榷之处,请大家踊跃提意见:  2. 原文中淡蓝色字体的文字,不宜翻译,保持原样.  1. ANALYTIC FUNCTIONS Analytic functions compute an aggregate value based on a group of rows. They differ from aggregate functions

oracle的分析函数over(Partition by...)

Sql代码 over(Partition by...) 一个超级牛皮的ORACLE特有函数. 最近工作中才接触到这个功能强大而灵活的函数. oracle的分析函数over 及开窗函数 一:分析函数over Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是 对于每个组返回多行,而聚合函数对于每个组只返回一行. 下面通过几个例子来说明其应用. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

ORACLE统计分析函数

本文讲述Oracle分析函数用法,首先建库: Sql代码   create table earnings -- 打工赚钱表 ( earnmonth varchar2(6), -- 打工月份 area varchar2(20), -- 打工地区 sno varchar2(10), -- 打工者编号 sname varchar2(20), -- 打工者姓名 times int, -- 本月打工次数 singleincome number(10,2), -- 每次赚多少钱 personincome n

oracle的分析函数over 及开窗函数

转:http://www.2cto.com/database/201310/249722.html 一:分析函数over Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是 对于每个组返回多行,而聚合函数对于每个组只返回一行. 下面通过几个例子来说明其应用. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

Oracle的分析函数over

Oracle分析函数over的应用很广泛. 用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行. 经常与sum,rank等函数同事出现. 例子: soctt的emp表为例:需要获得每个部门的总的sal.则 SELECT empno, ename, deptno,SUM(sal) OVER(PARTITION BY deptno) AS  deptpn_sal FROM emp 结果如图: 1 7782 CLARK 10 87502 7839 K

oracle 统计/分析函数

Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行. 语法: Sql代码 <analytic-function>(<argument>,<argument>,...)    over(    <query-partition-clause>    <order-by-clause>    <windowing-clause>    )

oracle 之分析函数 over (partition by ...order by ...)

一:分析函数overOracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行. 1.分析函数和聚合函数的不同之处: 分析函数和聚合函数很多是同名的,意思也一样,只是聚合函数用group by分组,每个分组返回一个统计值,而分析函数采用partition by分组,并且每组每行都可以返回一个统计值.简单的说就是聚合函数返回统计结果,分析函数返回明细加统计结果. (一).分析函数语法: FUNCTION_

oracle常用分析函数 over(partition by xxx order by xxx)

--over order by 连续累加的意思,把by后面相同的字段,一个组组累加起来SELECT id_,name_,proc_def_id_, count(*) over(order by name_) FROM ACT_RU_TASK --over partition by 分组统计 类似于group by,区别是它会列出重复的项,而group by只列出一条SELECT id_,name_,proc_def_id_, count(*) over(partition by name_) F

Oracle 中的分析函数

Oracle常用分析函数介绍(排名函数+窗口函数) 2014年11月30日 ? 数据库 ? 共 3903字 ? 暂无评论 ? 阅读 7,772 次 评级函数 常见评级函数如下: RANK():返回数据项在分组中的排名,在排名相等时会在名次中留下空位,造成排名不连续. DENSE_RANK():同样返回数据项在分组中排名,不过在排名相等时不会留下名位空位. CUME_DIST():返回特定值相对于一组值的位置,是累积分布(cumulative distribution)的简写. PERCENT_R