而ORACLE的常见分析函数有三类:
1。 OVER函数
分析函数的语法为:
Java代码
FUNCTION_NAME(,。。。)
OVER
()
例:
sum(sal) over (partition by deptno order by ename) new_alias
sum就是函数名
(sal)是分析函数的参数,每个函数有0~3个参数,参数可以是表达式,例如:sum(sal+comm)
over 是一个关键字,用于标识分析函数,否则查询分析器不能区别sum()聚集函数和sum()分析函数
partition by deptno 是可选的分区子句,如果不存在任何分区子句,则全部的结果集可看作一
个单一的大区
order by ename 是可选的order by 子句,有些函数需要它,有些则不需要。
依靠已排序数据的那些函数,如:用于访问结果集中前一行和后一行的LAG和LEAD,必须使用,其它函数,如AVG,则不需要。在使用了任何排序的开窗函数时,该子句是强制性的,它指定了在计算分析函数时一组内的数据是如何排序的。
eg:按区域查找上一年度订单总额占区域订单总额20%以上的客户,来看看分析函数的应用。
【1】测试环境:
Java代码
SQL> desc orders_tmp;
Name
Null?
Type
----------------------- -------- ----------------
CUST_NBR
NOT NULL NUMBER
(5)
REGION_ID
NOT NULL NUMBER
(5)
SALESPERSON_ID
NOT NULL NUMBER
(5)
YEAR
NOT NULL NUMBER
(4)
MONTH
NOT NULL NUMBER
(2)
TOT_ORDERS
NOT NULL NUMBER
(7)
TOT_SALES
NOT NULL NUMBER(11,2)
【2】测试数据:
Java代码
SQL> select * from orders_tmp;
CUST_NBR
REGION_ID SALESPERSON_ID
YEAR
MONTH TOT_ORDERS
TOT_SALES
---------- ---------- -------------- ---------- ---------- ---------- ----------
11
7
11
2001
7
2
12204
4
5
4
2001
10
2
37802
7
6
7
2001
2
3
3750
10
6
8
2001
1
2
21691
10
6
7
2001
2
3
42624
15
7
12
2000
5
6
24
12
7
9
2000
6
2
50658
1
5
2
2000
3
2
44494
1
5
1
2000
9
2
74864
2
5
4
2000
3
2
35060
2
5
4
2000
4
4
6454
2
5
1
2000
10
4
35580
4
5
4
2000
12
2
39190
13 rows selected。
全部