oracle 分析函数之分组求和、连续求和

article/2025/9/18 6:50:13

最近在《sql cookbook》书上发现了名叫 分析函数 的东西,之前学 oracle 时没有印象,现在感觉其分析函数的功能相当强大、神奇,

就特意去找到了 chm 文档研究了一下,想要的朋友在本文末尾自行下载。

本文的例子都来源于 chm 文档,本人只是执行了这些 sql,看着结果理解分析函数的功能用途,并对分析函数做了注释,方便后面查看理解。

请各位读者结合 chm 中的例子一起食用,更好理解消化。

1、分组求和:GROUP BY子句

具体 sql 实例我就不贴了,具体请查看chm  分析函数 6.00

分别执行以下 sql ,对比它们执行后的结果:

--原:这是我们大家都知道的 group by() 函数
select id,area,stu_type,sum(score) score 
from students
group by id,area,stu_type
order by id,area,stu_type;--A、GROUPING SETS
select id,area,stu_type,sum(score) score 
from students
group by grouping sets((id,area,stu_type),(id,area),id)
order by id,area,stu_type;--B、ROLLUP
select id,area,stu_type,sum(score) score 
from students
group by rollup(id,area,stu_type)
order by id,area,stu_type;--C、CUBE
select id,area,stu_type,sum(score) score 
from students
group by cube(id,area,stu_type)
order by id,area,stu_type;

下面是这四条语句分别执行后的结果


注:1)每个函数都是在原来的基础上增加了功能,对不同分组条件的求和;

         2)对函数的理解自行看结果对比理解,鄙人暂时没想到合适的语言解释。


2、连续求和:sum(...)  over(...)

具体实例看 chm 文档 6.01

使用 sum(sal) over (order by ename)... 查询员工的薪水“连续”求和,注意over (order by ename);

如果没有order by 子句,求和就不是“连续”的,放在一起,体会一下不同之处:

select deptno,ename,sal,sum(sal) over (order by ename) 连续求和,sum(sal) over () 总和,   -- 此处sum(sal) over () 等同于sum(sal)100*round(sal/sum(sal) over (),4) "份额(%)"from emp

以下是执行结果,由于内置的表数据可能不一样,每个人的结果不一定一样,但效果是一样的


从结果可以看出,这里的连续求和的意思是把当前行的数据与之前所有数据相加求和作为该行的和

------------------------------------------------------------------------------------------------------------------------------------------------

使用子分区查出各部门薪水连续的总和。注意按部门分区。注意over(...)条件的不同,

sum(sal) over (partition by deptno order by ename) 按部门“连续”求总和
sum(sal) over (partition by deptno) 按部门求总和
sum(sal) over (order by deptno,ename) 不按部门“连续”求总和
sum(sal) over () 不按部门,求所有员工总和,效果等同于sum(sal)

还是贴一下执行结果更方便理解吧


partition 是划分、分割、区分的意思,partition by 类似于 group by

这里的功能就是按部门分区,在每个部门内部做连续求和

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

注意:在"... from emp;"后面不要加order by 子句,使用的分析函数的(partition by deptno order by sal)里已经有排序的语句了,

如果再在句尾添加排序子句,一致倒罢了,不一致,结果就令人费劲了。



附:该安装包包含以下文档

 点击下载http://download.csdn.net/download/alias_fa/10162035




http://chatgpt.dhexx.cn/article/kb0jpiW4.shtml

相关文章

在Oracle分析函数中使用FIRST_VALUE和LAST_VALUE

FIRST_VALUE and LAST_VALUE in Oracle Oracle中的FIRST_VALUE和LAST_VALUE These are Oracle analytical functions used to return the first value or the last value from a set of ordered rows. These functions can get the first value or the last value within a co…

Oracle 分析函数over,列转行函数pivot理解及综合运用(报表中的小计和合计)

1、Over函数(分析统计函数) 1.1语法 sum/avg/count() over(partition by ..)over()在什么条件之上;partition by 按哪个字段划分组; 1.2示例 SELECT E.ENAME,E.JOB,E.SAL,E.DEPTNO,SUM(E.SAL) OVER(PARTITION BY E.DEPTNO) SUM_SAL, …

oracle 百分位数,oracle分析函数 percent_rank, percentile_cont, percentile_disc

)*20=18 percentile_disc() PERCENTILE_DISC 这里就不做详细分析。 Syntax Purpose PERCENTILE_DISC is an inverse distribution function that assumes a discrete distribution model. It takes a percentile value and a sort specification and returns an element from t…

Oracle所有分析函数

Oracle分析函数 Oracle分析函数——函数列表 SUM :该函数计算组中表达式的累积和 MIN :在一个组中的数据窗口中查找表达式的最小值 MAX :在一个组中的数据窗口中查找表达式的最大值 AVG :用于计算…

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

说明:聚合函数(如sum()、max()等)可以计算基于组的某种聚合值,但是聚合函数对于某个组只能返回一行记录。若想对于某组返回多行记录,则需要使用分析函数。 1、rank()/dense_rank over(partition by ... order by ...) …

【Oracle】Oracle分析函数详解

Oracle数据库中的函数有多种,比如单行函数、聚合函数、对象引用函数、模型函数、OLAP函数等。本篇将详细介绍Oracle数据库中的分析函数。 一 分析函数概述 所谓分析函数,是基于一组数据行计算聚合值,其与聚合函数的不同之处在于&#xff0c…

oracle分析函数详解

一、Oracle分析函数 分析函数是什么? 分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计值。 分析函数和聚合函数的不同之处是什么…

Oracle 分析函数练习实例

创建表 create table emp(deptno varchar2(20) ,empno varchar2(20),ename varchar(20),sal number );sql演示 –显示各部门员工的工资,并附带显示该部分的最高工资。 select e.deptno,e.empno,e.ename,e.sal,last_value(e.sal)over(partition by e.deptnoorder …

oracle ntile函数,Oracle分析函数ntile

Oracle分析函数ntile 有这么一个需求,将课程的成绩分成四个等级,为学生打A、B、C、D的绩效。 drop table course purge; create table course ( id number, grade number ); insert into course values(1,50); insert into course values(2,55); insert …

Oracle之分析函数

目录 1. 认识分析函数 1.1 什么是分析函数 1.2 分析函数和聚合函数的不同 1.3 分析函数的形式 2. 理解over()函数 2.1 两个order by 的执行机制 2.2 分析函数中的分组、排序、窗口 2.3 帮助理解over()的实例 3. 常见分析函数 3.1 演示表和数据的生成 3.2 first_valu…

Oracle中的分析函数

目录 1、理解什么是分析函数? 2、分析函数和聚合函数区别? 3、分析函数的语法: 4、常用的分析函数: 5、运用分析函数求相关累计问题 6、运用分析函数求相关排序问题 1. RANK()函数: 2. DENSE_RANK()函数&#…

常用Oracle分析函数大全

Oracle的分析函数功能非常强大,工作这些年来经常用到。这次将平时经常使用到的分析函数整理出来,以备日后查看。 我们拿案例来学习,这样理解起来更容易一些。 1、建表 1 2 3 4 5 6 7 8 9 10 create table earnings -- 打工赚钱表 ( ear…

oracle分析函数技术详解(配上开窗函数over())

一、Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计值。 分析函数和聚合函数的不同之处是什么?普通的聚合函数用…

Python 输出小数点后保留两位有效数字简便方法

用round(a,n) a代表变量,n代表想保留的小数点的个数;比如:

金额千位分隔符及保留2位小数

目录 numberObject.toFixed(num) 正则 $1、$2 正则 {} 正则 ? 正则 ?: 正则 正则 $ 正则 | numberObject.toFixed(num) NumberObject.toFixed(num) 方法把 Number 四舍五入为指定小数位数数字,返回 string 类型num 规定小数位数 0 ~ 20 之间…

chatgpt赋能python:Python中保留两位小数输出的方法:一个完整的指南

Python中保留两位小数输出的方法: 一个完整的指南 介绍 在Python编程中,有时候我们需要将数字保留到小数点后两位输出。例如,货币单位到分、科学计算等等。本文将介绍多种方法实现这个目标,包括Python的内置函数以及第三方库的函数。 方法…

c++ 保留2位小数输出

1.需要头文件<iomanip> 2.结果会经过四舍五入&#xff1b; 3.公式为 cout<<fixed<<setprecision(2)<<“要输出的变量”<<endl; !!!!!!setprecision()&#xff0c;括号中填几&#xff0c;就是保留几位小数&#xff1b;

python保留2位小数

一&#xff1a;使用占位符方法&#xff1a; # 1&#xff1a;%g 科学计数法输出小数&#xff0c;用于舍弃无效的小数 print("%g"%(1.2000004)) print("%.2g"%(1.2000004)) # 2&#xff1a;直接使用%f 输出小数&#xff0c;会出现无效的0&#xff1b;使用%.…

C语言-------如何打印保留小数点后1,2,..位

首先你要想有小数&#xff0c;则在数据存储时就要用到浮点型&#xff08;float &#xff0c;double&#xff09; float a 0; double a 0; 其次在打印时和输入时都要用对应的%f&#xff08;float&#xff09;,%lf (double) printf("%.2f",) , printf("%.2lf…

【postgresql 小数点】pg保留2位小数

实现方式&#xff1a; cast函数 cast A as B round(cast( A as B),2) SELECT calculate_time,round(CAST("value" as numeric),2) as fcao from arithmetic.dws_tag_today where byt_namehk_fcao and calculate_time > now() - interval 2 hour ORDER BY calcu…