开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例如下:
over(order by salary) 按照salary排序进行累计,order by是个默认的开窗函数
over(partition by deptno)按照部门分区
over(order by salary range between 50 preceding and 150 following)
每行对应的数据窗口是之前行幅度值不超过50,之后行幅度值不超过150
over(order by salary rows between 50 preceding and 150 following)
每行对应的数据窗口是之前50行,之后150行
over(order by salary rows between unbounded preceding and unbounded following)
每行对应的数据窗口是从第一行到最后一行,等效:
over(order by salary range between unbounded preceding and unbounded following)
eg.
select * from
(
select p.deal_no,p.step_id,p.charge_id,p.dr_acc_no,
sum(p.dr_origin_amt)
over (partition by p.deal_no,p.step_id,p.dr_acc_no order by p.charge_id) as a,
dense_rank()
over (partition by p.deal_no,p.step_id,p.dr_acc_no order by p.charge_id) as b
from ixqdbaci p
where p.entity='002' and p.charge_id not like '99%'
and p.deal_no like '00779010010612%'
) where b=1
sum中的over()加上order by后会变成递增累加,而不是分组的所有值sum,所以在这条sql中应该把a列的oder by p.charge_id删除,b列的dense_rank是为了区分同一组的不同行,并且order by是不可少的。
分享到:
相关推荐
在Oracle数据库中,开窗函数是一种非常强大的功能,它能够帮助我们对数据进行更复杂的分析和处理。开窗函数允许我们在查询结果集的一个窗口内执行聚合操作,而无需对数据进行物理排序或分组。本文将重点介绍`OVER`...
本文将详细介绍Oracle中的`OVER`子句以及几种常用的开窗函数,包括`ROW_NUMBER()`, `RANK()`, `DENSE_RANK()`和`LAG()`等。 #### 二、基本概念 - **`OVER`子句**:`OVER`子句用于指定分析函数的作用范围,它可以...
`OVER (PARTITION BY ...)` 和开窗函数在Oracle数据库中提供了极其强大的数据处理能力,特别是在需要进行复杂的数据分析或报表制作时。掌握这些技术对于提高数据库查询效率和数据处理能力至关重要。
- **制表(reporting)函数**:与开窗函数同名,但作用于一个分区或一组上的所有列,不依赖于排序。 - **LAG、LEAD函数**:这类函数允许在结果集中向前或向后检索值,避免数据的自连接。 - **VAR_POP、VAR_SAMP、...
#### 二、开窗函数理解 开窗函数是定义分析函数作用范围的关键部分,它通过指定特定的条件来界定分析函数的操作区间。下面是一些常见的开窗函数及其含义: 1. **`OVER (ORDER BY salary)`**:此函数按薪资排序进行...
开窗函数是分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化。开窗函数可以指定数据窗口的大小和范围,例如按照 salary 排序进行累计、按照部门分区等。 下面是 Oracle 中一些常用的分析函数...
开窗函数在MSSQL Server、Oracle、DB2等主流数据库系统中得到广泛支持,但遗憾的是,MySQL当前版本还不支持。 首先,我们需要理解什么是窗口。在SQL中,"窗口"是指在执行开窗函数时定义的一组行,这组行是相对于...
1. **开窗函数(Over)**: 开窗函数允许在一组行上执行计算,这组行被称为“窗口”,窗口可以基于特定的排序或分区条件。例如: - `OVER (ORDER BY salary)` 按薪资排序进行累计。 - `OVER (PARTITION BY deptno)`...
#### 四、开窗函数的深入理解 **开窗函数**(也称为窗口函数)是指定了分析函数作用的具体数据集范围。这种范围可以是固定的行数、固定的距离值或者是根据排序顺序动态变化的。 - **OVER (ORDER BY salary)**:按...
开窗函数定义了分析函数作用的数据范围,通常包括以下几种类型: 1. **ORDER BY**:根据指定列的值对数据进行排序。 2. **PARTITION BY**:将数据划分成不同的分区,每个分区独立进行计算。 3. **RANGE BETWEEN** ...
在2003年的ISO SQL标准中引入了开窗函数,随后被MSSQL Server、Oracle、DB2等主流数据库系统支持,但遗憾的是,MySQL目前还不支持。 开窗函数的核心在于定义一个“窗口”,这个窗口可以随着查询中的每一行变化,...
### 使用 OVER 函数实现递归汇总计算 #### Oracle 分析函数概述 自 Oracle 8.1.6 版本起,Oracle 数据库引入了分析函数(Analytic Functions),这是一种非常强大的工具,主要用于处理复杂的查询需求,尤其是在...
理解开窗函数的概念至关重要,因为它允许你根据当前行及其相邻行进行计算。比如,`OVER (ORDER BY salary RANGE BETWEEN 50 PRECEDING AND 150 FOLLOWING)` 会创建一个窗口,包含当前行及前后50到150工资范围内的行...
这些函数可以帮助用户更高效地处理大型数据集,特别是在数据仓库环境中。本文将详细介绍Oracle OLAP函数的基本语法结构及其各个组成部分,并通过具体示例来解释不同类型的函数如何工作。 #### 二、OLAP函数基本语法...
开窗函数用于指定分析函数执行计算的数据范围或窗口。这些窗口可以基于行数、数据范围或者是混合定义。常见的开窗函数包括`ORDER BY`、`PARTITION BY`等。 - **ORDER BY**:按照指定的列对数据进行排序。 - **...
- **报表(Reporting)函数**: 与开窗函数类似名称,但作用于整个分区或一组数据,而不是一个特定的窗口。例如,`SUM`或`COUNT`函数不指定`ORDER BY`子句时即为报表函数。 - **LAG`, `LEAD`函数**: 这些函数允许向前...