Oracle分析函数sum over介绍

合集下载

oracle_OLAP分析函数

oracle_OLAP分析函数

CUME_DIST() OVER(ORDER BY DEPTNO, SAL DESC), --相对位置/总数 --(COUNT(*) over())**/
LAG(ENAME) OVER(PARTITION BY DEPTNO ORDER BY SAL DESC), -- 前一行的值 LEAD(ENAME) OVER(PARTITION BY DEPTNO ORDER BY SAL DESC), -- 后一行的值 NTILE(7) OVER(ORDER BY DEPTNO, SAL DESC), --将一个组分为"表达式"的散列表示 PERCENT_RANK() OVER(ORDER BY DEPTNO, SAL DESC), --对于一个组中给定的行来说,在计算那行的序号时,先减1,然后除以n-1(n为组
SELECT ENAME,SAL,HIREDATE,HIREDATE-100 WINDOWTOP, FIRST_VALUE(ENAME)
OVER(ORDER BY HIREDATE ASC
RANGE 100 PRECEDING) ENAME_PREC, FIRST_VALUE(HIREDATE)
OVER(ORDER BY HIREDATE ASC
范例2
• -- 两种不同的排序方式 • SELECT DEPTNO,ENAME,SAL, • DENSE_RANK() • OVER(PARTITION BY DEPTNO • ORDER BY SAL DESC)DR, • RANK() • OvER(PARTITION BY DEPTNO • ORDER BY SAL DESC) R • FROM SCOTT.EMP • ORDER BY DEPTNO,SAL DESC;

Oracle分析函数用法详解

Oracle分析函数用法详解

Oracle分析函数Oracle分析函数实际上操作对象是查询出的数据集,也就是说不需二次查询数据库,实际上就是oracle实现了一些我们自身需要编码实现的统计功能,对于简化开发工作量有很大的帮助,特别在开发第三方报表软件时是非常有帮助的。

Oracle从8.1.6开始提供分析函数。

一、基本语法oracle分析函数的语法:function_name(arg1,arg2,...)over(<partition-clause> <order-by-clause ><windowing clause>)说明:1.partition-clause 数据记录集分组2.order-by-clause 数据记录集排序3.windowing clause 功能非常强大、比较复杂,定义分析函数在操作行的集合。

有三种开窗方式: range、row、specifying。

二、常用分析函数1. avg(distinct|all expression) 计算组内平均值,distinct 可去除组内重复数据select deptno,empno,sal,avg(sal) over (partition by deptno) avg_sal from t;DEPTNO EMPNO SAL AVG_SAL---------- ---------- ---------- ----------10 7782 2450 2916.666677839 5000 2916.666677934 1300 2916.6666720 7566 2975 21757902 3000 21757876 1100 21757369 800 21757788 3000 217530 7521 1250 1566.666677844 1500 1566.666677499 1600 1566.666677900 950 1566.666677698 2850 1566.666677654 1250 1566.666672.count(<distinct><*><expression>) 对组内数据进行计数3.rank() 和dense_rank()dense_rank()根据 order by 子句表达式的值,从查询返回的每一行,计算和其他行的相对位置,序号从 1 开始,有重复值时序号不跳号。

oraclesum函数用法

oraclesum函数用法

oraclesum函数用法oraclesum函数用法•简介:–oraclesum是一个用于在编程中计算列表中元素的和的函数。

–它接受一个列表作为输入,并返回该列表中所有元素的总和。

–oraclesum是一种方便快捷的方法,可以帮助开发者在处理数值数据时减少代码的长度和复杂性。

•使用方法:–oraclesum函数的基本语法如下:oraclesum(list)–其中,参数list是一个需要计算和的列表。

•示例1:–计算列表中所有数值的和。

numbers = [1, 2, 3, 4, 5]total = oraclesum(numbers)print(total) # Output: 15的列表numbers。

–通过调用oraclesum函数并传递numbers 列表作为参数,我们可以得到列表中所有元素的总和。

–最后,我们打印出计算得到的总和15。

•示例2:–计算包含负数的列表的和。

numbers = [-1, -2, -3, -4, -5]total = oraclesum(numbers)print(total) # Output: -15–在这个示例中,我们定义了一个包含五个负数的列表numbers。

–通过调用oraclesum函数并传递numbers 列表作为参数,我们可以计算这些负数的总和。

–最后,我们打印出计算得到的总和-15。

•示例3:–计算包含浮点数的列表的和。

numbers = [, , , , ]total = oraclesum(numbers)print(total) # Output:数的列表numbers。

–通过调用oraclesum函数并传递numbers 列表作为参数,我们可以计算这些浮点数的总和。

–最后,我们打印出计算得到的总和 ``。

•示例4:–计算空列表的和。

numbers = []total = oraclesum(numbers)print(total) # Output: 0–在这个示例中,我们定义了一个空列表numbers。

oracle累积求和分析函数sumover的使用

oracle累积求和分析函数sumover的使用

oracle累积求和分析函数sumover的使⽤oracle sum()over函数的使⽤over不能单独使⽤,要和分析函数:rank(),dense_rank(),row_number()等⼀起使⽤。

over函数的参数:over(partition by columnname1 order by columnname2)含义,按columname1指定的字段进⾏分组排序,或者说按字段columnname1的值进⾏分组排序。

例如:employees表中,有两个部门的记录:department_id =10和20select department_id,rank() over(partition by department_id order by salary) from employees 就是指在部门10中进⾏薪⽔的排名,在部门20中进⾏薪⽔排名。

如果是partition by org_id,则是在整个公司内进⾏排名。

-------------------------------sum(...) over ... 的使⽤根据over(...)条件的不同使⽤ sum(sal) over (order by ename)... 查询员⼯的薪⽔“连续”求和;注意over (order by ename)如果没有order by ⼦句,求和就不是“连续”的,把所有的值加到⼀起作为⼀个值。

体会⼀下不同之处:SQL> select deptno,ename,sal,2 sum(sal) over (order by ename) 连续求和,3 sum(sal) over () 总和, -- 此处sum(sal) over () 等同于sum(sal)4 100*round(sal/sum(sal) over (),4) "份额(%)"5 from emp6 / DEPTNO ENAME SAL 连续求和总和份额(%)---------- ---------- ---------- ---------- ---------- ----------20 ADAMS 1100 1100 29025 3.7930 ALLEN 1600 2700 29025 5.5130 BLAKE 2850 5550 29025 9.8210 CLARK 2450 8000 29025 8.4420 FORD 3000 11000 29025 10.3430 JAMES 950 11950 29025 3.2720 JONES 2975 14925 29025 10.2510 KING 5000 19925 29025 17.2330 MARTIN 1250 21175 29025 4.3110 MILLER 1300 22475 29025 4.4820 SCOTT 3000 25475 29025 10.3420 SMITH 800 26275 29025 2.7630 TURNER 1500 27775 29025 5.1730 WARD 1250 29025 29025 4.31使⽤⼦分区查出各部门薪⽔连续的总和。

oracle常用的分析函数

oracle常用的分析函数

oracle常⽤的分析函数常⽤的分析函数如下所列: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(partition by ... order by ...)avg() over(partition by ... order by ...)first_value() over(partition by ... order by ...)last_value() over(partition by ... order by ...)lag() over(partition by ... order by ...)lead() over(partition by ... order by ...)⼀、Oracle分析函数简介:在⽇常的⽣产环境中,我们接触得⽐较多的是OLTP系统(即Online Transaction Process),这些系统的特点是具备实时要求,或者⾄少说对响应的时间多长有⼀定的要求;其次这些系统的业务逻辑⼀般⽐较复杂,可能需要经过多次的运算。

⽐如我们经常接触到的电⼦商城。

在这些系统之外,还有⼀种称之为OLAP的系统(即Online Aanalyse Process),这些系统⼀般⽤于系统决策使⽤。

通常和数据仓库、数据分析、数据挖掘等概念联系在⼀起。

这些系统的特点是数据量⼤,对实时响应的要求不⾼或者根本不关注这⽅⾯的要求,以查询、统计操作为主。

Oracle之分析函数

Oracle之分析函数

Oracle之分析函数⼀、分析函数 1、分析函数 分析函数是Oracle专门⽤于解决复杂报表统计需求的功能强⼤的函数,它可以在数据中进⾏分组然后计算基于组的某种统计值,并且每⼀组的每⼀⾏都可以返回⼀个统计值。

2、分析函数和聚合函数的区别 普通的聚合函数⽤group by分组,每个分组返回⼀个统计值,⽽分析函数采⽤partition by分组,并且每组每⾏都可以返回⼀个统计值。

3、分析函数的形式 分析函数带有⼀个开窗函数over(),包含分析⼦句。

分析⼦句⼜由下⾯三部分组成: partition by :分组⼦句,表⽰分析函数的计算范围,不同的组互不相⼲; ORDER BY:排序⼦句,表⽰分组后,组内的排序⽅式; ROWS/RANGE:窗⼝⼦句,是在分组(PARTITION BY)后,组内的⼦分组(也称窗⼝),此时分析函数的计算范围窗⼝,⽽不是PARTITON。

窗⼝有两种,ROWS和RANGE; 使⽤形式如下:OVER(PARTITION BY xxx PORDER BY yyy ROWS BETWEEN rowStart AND rowEnd) 注:窗⼝⼦句在这⾥我只说rows⽅式的窗⼝,range⽅式和滑动窗⼝也不提。

⼆、OVER() 函数 1、sql 查询语句的 order by 和 OVER() 函数中的 ORDER BY 的执⾏顺序 分析函数是在整个sql查询结束后(sql语句中的order by的执⾏⽐较特殊)再进⾏的操作, 也就是说sql语句中的order by也会影响分析函数的执⾏结果: [1] 两者⼀致:如果sql语句中的order by满⾜分析函数分析时要求的排序,那么sql语句中的排序将先执⾏,分析函数在分析时就不必再排序; [2] 两者不⼀致:如果sql语句中的order by不满⾜分析函数分析时要求的排序,那么sql语句中的排序将最后在分析函数分析结束后执⾏排序。

2、分析函数中的分组/排序/窗⼝分析函数包含三个分析⼦句:分组(partition by),排序(order by),窗⼝(rows/range)窗⼝就是分析函数分析时要处理的数据范围,就拿sum来说,它是sum窗⼝中的记录⽽不是整个分组中的记录,因此我们在想得到某个栏位的累计值时,我们需要把窗⼝指定到该分组中的第⼀⾏数据到当前⾏, 如果你指定该窗⼝从该分组中的第⼀⾏到最后⼀⾏,那么该组中的每⼀个sum值都会⼀样,即整个组的总和。

Oracle分析函数sumover介绍

Oracle分析函数sumover介绍

Oracle分析函数sumover介绍其中,sum over函数是一种常用的分析函数,它用于对指定列进行求和计算,并返回每一行的累计总和。

以下是sum over函数的基本语法:```SUM(expression) OVER (PARTITION BY col1 [, col2, ...] ORDER BY col3 [, col4, ...] [ROWS <frame specification>])```其中,expression是要进行求和的列或表达式,col1、col2等是用于分组的列,col3、col4等是用于排序的列,frame specification是用于定义计算总和的范围。

sum over函数的作用可以通过一个简单的示例来说明。

假设我们有一个包含销售订单的表,其中包含订单号、产品名称和销售量等列。

我们想要计算每个产品的累计销售量,可以使用sum over函数来实现:```sqlSELECT order_id, product_name, sales_quantity,SUM(sales_quantity) OVER (PARTITION BY product_name ORDER BYorder_id) AS cumulative_salesFROM sales_orders;```在上述示例中,我们使用了PARTITION BY子句来按照产品名称进行分组,然后使用ORDER BY子句按照订单号进行排序。

通过在SUM函数中使用over子句,我们可以计算每个产品的累计销售量,并将结果作为新的列返回。

除了基本的用法之外,sum over函数还可以与其他函数组合使用,进一步扩展其功能。

例如,我们可以使用sum over函数来计算百分比:```sqlSELECT order_id, product_name, sales_quantity,sales_quantity / SUM(sales_quantity) OVER (PARTITION BY product_name) * 100 AS percentageFROM sales_orders;```在上述示例中,我们使用SUM函数计算每个产品的总销售量,并将结果作为分母,然后将每个销售数量除以总销售量并乘以100,得到每个产品的销售百分比。

Oracle分析函数Over()

Oracle分析函数Over()

Oracle分析函数Over()阅读⽬录⼀、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/last)回到顶部⼀、Over()分析函数说明:聚合函数(如sum()、max()等)可以计算基于组的某种聚合值,但是聚合函数对于某个组只能返回⼀⾏记录。

若想对于某组返回多⾏记录,则需要使⽤分析函数。

1、rank()/dense_rank over(partition by ... order by ...)说明:over()在什么条件之上; partition by 按哪个字段划分组; order by 按哪个字段排序;注意: (1)使⽤rank()/dense_rank() 时,必须要带order by否则⾮法 (2)rank()/dense_rank()分级的区别: rank(): 跳跃排序,如果有两个第⼀级时,接下来就是第三级。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

分析函数sum over() 介绍
报送单位:审核人:
类型:业务应用
关键字:分析函数
1、引言
运维中,常常需要通过SQL语句对单行数据进行查询,同时又需要对结果集进行汇总,通常的方法是通过两个SQL语句分别进行查询汇总,这样效率低下。

2、现象描述
本节介绍一种ORACLE提供的全新的函数sum over(),该类函数称为分析函数,这类函数功能强大,可以通过一个SQL语句对数据进行遍历的同时又进行汇总,而且一张表只进行一次扫描,极大地提高SQL的执行效率。

3、处理过程
语法:
FUNCTION_NAME(<argument1>,<argument2>,...)
OVER(<Partition clause><Order by clause><Windows clause>)
NAME:可以是SUM,AVG,MAX,MIN,COUNT等其它,这些函数单独使用称为聚集函数,与OVER子句一起使用使称为分析函数。

在当分析函数使用时,SQL语句中不需要使用GROUP BY子句。

执行计划:
下图说明分析函数只对表进行一次扫描
4、举例说明
下面分别举例来说明分析函数的使用,原始数据如下表
示例1:查询单行数据同时对所有数据工资进行汇总求和
示例2:查询所有数据,同时对第各部门工资进行汇总,汇总范围取值为第一行所在部门至当前部门所有数据。

示例3:查询所有数据,并且每一行汇总值按ENAME排序后取第一行至当前行ENAME所在行。

示例4:查询所有数据,并且每一行汇总值按EMPNO排序后取第一行至当前行EMPNO所在行
示例5:查询所有数据,同时每行对各部门分别进行按EMPNO排序后从各组第一行至当前行汇总求和。

示例6:查询所有数据,同时每行对从当前上两行数据范围的工资进行汇总求和。

示例7:查询所有数据,同时每行对从当前向前一行数据向后两行数据范围的工资进行汇总求和。

示例8:查询所有数据,同时每行对从当前行雇用日期向前推三天的范围的工资进行汇总求和。

HIREDATE-3>=HIREDATE>=
HIREDATE+3
示例9: 查询所有数据,同时每行对从当前行工资向前加500向后减500的工资涉及的行进行汇总求和。

SAL-500>=SAL>= SAL+500
5、经验总结
适当地使用分析函数可以提高SQL语句的效率。

减少应用书写逻辑,同时减少系统资源占用
其它类似分析函数AVG,MAX,MIN,COUNT使用与SUM类似。

相关文档
最新文档