oracle分析函数

oracle 统计/分析函数

本小妞迷上赌 提交于 2020-03-16 14:05:39
Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。 语法: Sql代码 <analytic- function >(<argument>,<argument>,...) over( <query-partition-clause> < order - by -clause> <windowing-clause> ) 说明: <1> over是关键字,用于标识分析函数。 <2> <analytic-function>是指定的分析函数的名字。 <3> <argument>为参数,分析函数可以选取0-3个参数。 <4> 分区子句<query-partition-clause>的格式为: partition by<value_exp>[,value_expr]... 关键字partition by子句根据由分区表达式的条件逻辑地将单个结果集分成N组。这里的"分区partition"和"组group" 都是同义词。 <5> 排序子句order-by-clause指定数据是如何存在分区内的。其格式为: order[siblings]by{expr|position|c_alias}[asc|desc][nulls first|nulls last] 其中: A.asc|desc

Oracle分析函数——【转】

谁都会走 提交于 2020-03-11 22:23:31
原文地址: http://love-flying-snow.iteye.com/blog/573083 以下是原文: 本文讲述Oracle分析函数用法,首先建表: Sql代码: create table earnings -- 打工赚钱表 ( earnmonth varchar2(6), -- 打工月份 area varchar2(20), -- 打工地区 sno varchar2(10), -- 打工者编号 sname varchar2(20), -- 打工者姓名 times int, -- 本月打工次数 singleincome number(10,2), -- 每次赚多少钱 personincome number(10,2) -- 当月总收入 ) 然后插入实验数据: insert into earnings values('200912','北平','511601','大魁',11,30,11*30); insert into earnings values('200912','北平','511602','大凯',8,25,8*25); insert into earnings values('200912','北平','511603','小东',30,6.25,30*6.25); insert into earnings values('200912','北平',

oracle的分析函数‘over’

亡梦爱人 提交于 2020-03-11 18:35:03
分析函数语法: 例 : sum(sal) over (partition by deptno order by ename) new_alias sum 就是函数名 (sal) 是分析函数的参数 , 每 个函数有 0~3 个参数 , 参数可以是表达式 , 例如 :sum(sal+comm) over 是一个 关键 字 , 用于 标识 分析函数 , 否 则查询 分析器 不能区 别 sum() 聚集函数和 sum() 分析函数 分析函数用于 计 算基于 组 的某 种 聚合 值 ,它和聚合函数的不同之 处 是: 对 于 每 个 组 返回多行,而聚合函数 对 于 每 个 组 只返回一行。 常用的分析函数如下所列 : row_number() over ( partition by ... order by ...) rank() over ( partition by ... order by ...) dense_rank() over ( partition by ... order by ...) count() over ( partition by ... order by ...) max() over ( partition by ... order by ...) min() over ( partition by ... order by ...) sum() over

Oracle分析函数Over()

Deadly 提交于 2020-03-09 13:30:09
Over()分析函数   说明:聚合函数(如sum()、max()等)可以计算基于组的某种聚合值,但是聚合函数对于某个组只能返回一行记录。若想对于某组返回多行记录,则需要使用分析函数。 rank()/dense_rank over(partition by ... order by ...) 说明:over()在什么条件之上;   partition by 按哪个字段划分组;   order by 按哪个字段排序; 注意:   (1)使用rank()/dense_rank() 时,必须要带order by否则非法   (2)rank()/dense_rank()分级的区别:     rank(): 跳跃排序,如果有两个第一级时,接下来就是第三级。     dense_rank(): 连续排序,如果有两个第一级时,接下来仍然是第二级。 示例:查询每个部门工资最高的员工信息 一般的写法 SELECT E.ENAME, E.JOB, E.SAL, E.DEPTNO FROM SCOTT.EMP E, (SELECT E.DEPTNO, MAX(E.SAL) SAL FROM SCOTT.EMP E GROUP BY E.DEPTNO) ME WHERE E.DEPTNO = ME.DEPTNO AND E.SAL = ME.SAL; 使用Over()函数 方法一: SELECT E

Oracle分析函数之开窗子句-即WINDOWING子句

拥有回忆 提交于 2020-03-02 14:46:23
Oracle的分析函数,对我们进行统计有很大的帮助,可以避免一些子查询等操作,在统计中,我们对开窗函数的接触较少,下面主要介绍下开窗函数的使用; http://www.itpub.net/thread-1241311-1-1.html http://www.oracle-base.com/articles/misc/analytic-functions.php#windowing_clause http://blog.sina.com.cn/s/blog_70cea94b0100xi46.html 首先我们介绍下分析函数的语义 (分为range和row): 缺省时相当于RANGE UNBOUNDED PRECEDING 值域窗(RANGE WINDOW) 如:RANGE N PRECEDING, 仅对数值或日期类型有效 ,选定窗为排序后当前行之前,某列(即排序列)值大于/小于(当 前 行该列值 –/+ N)的所有行,因此与ORDER BY子句有关系。 行窗(ROW WINDOW) 如:ROWS N PRECEDING ,选定窗为当前行及之前N行。还可以加上BETWEEN AND 形式,例如RANGE BETWEEN m PRECEDING AND n FOLLOWING,表示每行对应的数据窗口是之前m行与之后n行内。 1 SELECT empno, 2 sal, 3 mgr, 4

oracle 的分析函数

我与影子孤独终老i 提交于 2020-01-28 12:10:01
row_number() over(partition by ... order by ...) rank() over(partition by ... order by ...) dense_rank() over(partition by ... order by ...) /*--建表和插入测试数据 create table test (A1 number, A2 number ); insert into test(a1,a2) values(1, 3); insert into test(a1,a2) values(2, 4); insert into test(a1,a2) values(3, 2); insert into test(a1,a2) values(3, 5); insert into test(a1,a2) values(4, 2); select a1,a2, rank () over (order by a1) rank, dense_rank () over (order by a1) dense_rank, row_number () over (order by a1) row_number from test; */ A1 A2 RANK DENSE_RANK ROW_NUMBER ---------- ---------- -------

oracle 分析函数

杀马特。学长 韩版系。学妹 提交于 2020-01-28 00:15:14
Oracle-分析函数之连续求和 sum(…) over(…) Oracle-分析函数之排序值 rank()和dense_rank() Oracle-分析函数之排序后顺序号 row_number() Oracle-分析函数之取上下行数据 lag()和lead() 分析函数和聚合函数的区别 普通的聚合函数用group by分组,每个分组返回一个统计值, 分析函数采用partition by分组,并且每组每行都可以返回一个统计值。 分析函数带有一个开窗函数over(),包含三个分析子句: 1分组(partition by) 2排序(order by) 3窗口(rows) 规则 sum(…) over( ),对所有行求和 sum(…) over( order by … ), 连续求和 sum(…) over( partition by… ),同组内所行求和 sum(…) over( partition by… order by … ),同第1点中的排序求和原理,只是范围限制在组内 select * from t1; select sales_id, sales, dest, dept, revenue, sum(revenue) over() sum_order from test; select sales_id, sales, dest, dept, revenue, sum

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

痞子三分冷 提交于 2020-01-25 09:53:14
http://zonghl8006.blog.163.com/blog/static/4528311520083995931317/ over(Partition by...) 一个超级牛皮的ORACLE特有函数。 天天都用ORACLE,用了快2年了。最近才接触到这个功能强大而灵活的函数。真实惭愧啊! oracle的分析函数over 及开窗函数 一:分析函数over Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是 对于每个组返回多行,而聚合函数对于每个组只返回一行。 下面通过几个例子来说明其应用。 1:统计某商店的营业额。 date sale 1 20 2 15 3 14 4 18 5 30 规则:按天统计:每天都统计前面几天的总额 得到的结果: DATE SALE SUM ----- -------- ------ 1 20 20 --1天 2 15 35 --1天+2天 3 14 49 --1天+2天+3天 4 18 67 . 5 30 97 . 2:统计各班成绩第一名的同学信息 NAME CLASS S ----- ----- ---------------------- fda 1 80 ffd 1 78 dss 1 95 cfe 2 74 gds 2 92 gf 3 99 ddd 3 99 adf 3 45 asdf

ORACLE 偏移分析函数 lag()与lead() 用法

为君一笑 提交于 2019-12-26 13:42:19
一、简介   lag与lead函数是跟偏移量相关的两个分析函数,通过这两个函数可以在一次查询中取出同一字段的前N行的数据(lag)和后N行的数据(lead)作为独立的列,从而更方便地进行进行数据过滤。这种操作可以代替表的自联接,并且LAG和LEAD有更高的效率。 over()表示 lag()与lead()操作的数据都在over()的范围内,他里面可以使用partition by 语句(用于分组) order by 语句(用于排序)。partition by a order by b表示以a字段进行分组,再 以b字段进行排序,对数据进行查询。 例如:lead(field, num, defaultvalue) field需要查找的字段,num往后查找的num行的数据,defaultvalue没有符合条件的默认值。 二、示例 表初始化数据为:   a、获取当前记录的id,以及下一条记录的id select t.id id , lead(t.id, 1, null) over (order by t.id) next_record_id, t.cphm from tb_test t order by t.id asc   b、获取当前记录的id,以及上一条记录的id select t.id id , lag(t.id, 1, null) over (order by t.id) next

Oracle分析函数Over()

不羁岁月 提交于 2019-12-05 06:07:25
https://www.cnblogs.com/chinas/p/7058771.html?utm_source=itdadao&utm_medium=referral#_lab2_0_4 阅读目录 一、Over()分析函数 1、rank()/dense_rank over(partition by ... order by ...) 2、min()/max() over(partition by ...) 3、lead()/lag() over(partition by ... order by ...) 取前面/后面第n行记录 4、FIRST_VALUE/LAST_VALUE() OVER(PARTITION BY ...) 取首尾记录 5、ROW_NUMBER() OVER(PARTITION BY.. ORDER BY ..) 排序(应用:分页) 6、sum/avg/count() over(partition by ..) 7、 rows/range between … preceding and … following 上下范围内求值 rows between … preceding and … following 二、其他 1、NULLS FIRST/LAST 将空值字段记录放到最前或最后显示 2、NTILE(n) 3、keep(dense_rank first