sum() over(partition by order by desc rows between UNBOUNDED PRECEDING PRECEDING)
时间: 2024-09-19 09:06:11 浏览: 66
Oracle开发之报表函数
在SQL查询中,`SUM()` 函数通常用于计算某一列的总和,`OVER()` 子句则允许你在一组相关的行上应用窗口函数,如累计和。当你使用 `partition by`, `order by DESC`, 和 `rows between UNBOUNDED PRECEDING` 时,这意味着:
1. `partition by`:你按照某列(比如日期或组别)对结果集进行了分组。
2. `order by DESC`: 行按该列降序排列,即从最新值到最早值。
3. `rows between UNBOUNDED PRECEDING`:这里的“unbounded preceding”意味着包括所有在当前行之前的数据,也就是从历史记录开始。
所以,如果你这么写:
```sql
sum(column_name)
over(
partition by column_to_partition_by
order by column_to_sort DESC
rows between UNBOUNDED PRECEDING PRECEDING
)
```
它会在每个分区内部计算一列的累计和,从最新的数据点开始,向前累加到当前行之前的所有行。这通常会产生每个组的累计求和,但需要注意的是,这种设置可能不是所有数据库系统都支持,因为`UNBOUNDED PRECEDING PRECEDING`组合通常是错误的语法。实际应用中,请检查你的数据库文档确认正确的语法。
阅读全文