oracle over() 函数使用
时间: 2024-03-12 12:47:37 浏览: 85
over函数的使用
Oracle中的OVER()函数是用于执行窗口函数(window function)的。窗口函数是一种特殊的函数,它可以在查询结果集上执行计算,同时还可以访问和处理其他行的数据。
OVER()函数的语法如下:
```
function_name([arguments]) OVER (
[PARTITION BY partition_expression, ... ]
[ORDER BY sort_expression [ASC | DESC], ... ]
[ROWS BETWEEN frame_start AND frame_end]
)
```
其中,function_name是要执行的窗口函数,arguments是要传递给该函数的参数。PARTITION BY子句用于指定分区键,即将结果集分成若干分区进行计算。ORDER BY子句用于指定排序键,以便确定如何在分区内对行进行排序。ROWS BETWEEN子句用于指定窗口帧(frame),即要计算的行的范围。
以下是一些常见的窗口函数及其用法:
- ROW_NUMBER():返回结果集中每行的行号。
- RANK():计算结果集中每行的排名,相同的行具有相同的排名,下一个排名将被跳过。
- DENSE_RANK():计算结果集中每行的排名,相同的行具有相同的排名,下一个排名将不被跳过。
- SUM()、AVG()、MAX()、MIN():计算结果集中某一列的总和、平均值、最大值、最小值等。
以下是一个示例,演示如何使用OVER()函数计算每个分区中的总和和平均值:
```
SELECT department_id, salary,
SUM(salary) OVER (PARTITION BY department_id) AS sum_salary,
AVG(salary) OVER (PARTITION BY department_id) AS avg_salary
FROM employees;
```
在这个例子中,我们将employees表按照department_id分区,然后计算每个分区中salary列的总和和平均值。结果集中包含原始数据以及两个额外的列sum_salary和avg_salary,它们分别显示每个分区中的总和和平均值。
阅读全文