c语言编程笔录

首页 >   > 笔记大全

笔记大全

Oracle中的over函数怎么使用

更新时间:2024-01-03

1. OVER函数概述

Oracle的over()函数是一种分析函数,用于在SELECT查询中执行聚合计算。与常规聚合函数,如SUM和AVG不同,over()函数允许您根据指定的分析条件对结果进行分组并进行计算。

SELECT deptno, sal, AVG(sal) OVER (PARTITION BY deptno) as dept_avg_sal
FROM emp;

此SQL查询将员工表(emp)中的每个部门的平均薪资包括每行。

2. over()的基本语法

下面是使用over()函数的基本语法:

SELECT select_list, over_clause
FROM table_name;

其中:

  • select_list 定义您想要从表中检索的列列表
  • over_clause 以括号括起来,指定分析函数的条件和计算

3. over()的进一步使用

除了开箱即用的例子,over()函数还支持以下分析功能:

3.1 PARTITION BY子句

PARTITION BY子句允许您对结果进行分组。以下查询将每个部门的最高薪资筛选出:

SELECT deptno, sal, MAX(sal) OVER (PARTITION BY deptno) as dept_max_sal
FROM emp;

3.2 ORDER BY子句

ORDER BY子句定义用于排序每个分组内行的顺序。以下查询将每个部门的薪资进行排序,并使用row_number()函数给每行编号:

SELECT deptno, ename, sal, ROW_NUMBER() OVER (
PARTITION BY deptno ORDER BY sal DESC) as dept_rank
FROM emp;

3.3 RANGE和ROWS子句

RANGE和ROWS子句指定计算窗口的范围,可以通过使用frame子句指定。以下示例将窗口范围设置为根据薪资从上到下的一行:

SELECT deptno, ename, sal, AVG(sal) OVER (
ORDER BY sal RANGE BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING) as rolling_avg
FROM emp;

4. 总结

OVER()函数是Oracle支持的强大的分析函数,提供了各种分析功能,让您能够更好地理解和组织数据。通过使用PARTITION BY、ORDER BY、RANGE和ROWS子句,您可以精确控制计算和分组方式。

无论您是否是新手,对于数据分析而言,over()函数都是重要的工具,可以使查询和数据报告变得更强大和灵活。