我们通过这个文章来看一下分析函数FIRST_VALUE的用法。
【Analytic】分析函数之MIN函数:http://space.itpub.net/519536/viewspace-624736
【Analytic】分析函数之MAX函数:http://space.itpub.net/519536/viewspace-624749
【Analytic】分析函数之AVG函数:http://space.itpub.net/519536/viewspace-624799
【Analytic】分析函数之ROW_NUMBER函数:http://space.itpub.net/519536/viewspace-624886
【Analytic】分析函数之RANK函数:http://space.itpub.net/519536/viewspace-624985
【Analytic】分析函数之DENSE_RANK函数:http://space.itpub.net/519536/viewspace-625115
【Analytic】分析函数之COUNT函数:http://space.itpub.net/519536/viewspace-625191
1.万变不离其宗,先看FIRST_VALUE分析函数的10g语法描述。
FIRST_VALUE (expr [ IGNORE NULLS ])
OVER (analytic_clause)
2.通过实验看一下分析函数FIRST_VALUE的使用方法
1)创建测试表T,并初始化9条数据。
sec@ora10g> create table t (group_id number(10), name varchar2(10), salary int);
sec@ora10g> insert into t values (1,'Tom',1200);
sec@ora10g> insert into t values (2,'Kary',2400);
sec@ora10g> insert into t values (2,'Joe',800);
sec@ora10g> insert into t values (3,'Andy',100);
sec@ora10g> insert into t values (3,'Ellen',200);
sec@ora10g> insert into t values (3,'Erick',300);
sec@ora10g> insert into t values (3,'Hou',400);
sec@ora10g> insert into t values (3,'Mary',500);
sec@ora10g> insert into t values (3,'Secooler',600);
sec@ora10g> commit;
2)T表全貌
sec@ora10g> select * from t order by group_id,name;
GROUP_ID NAME SALARY
---------- ------------------------------ ----------
1 Tom 1200
2 Joe 800
2 Kary 2400
3 Andy 100
3 Ellen 200
3 Erick 300
3 Hou 400
3 Mary 500
3 Secooler 600
9 rows selected.
共三组数据,group_id分别是1、2和3。第1组有一个人,第2组有两个人,第3组有六个人。最后一列是每个人的薪水值。
3)FIRST_VALUE分析函数的简单用法
(1)在T表中添加一列,标识每一个数据分区中薪水最低的人名。
sec@ora10g> select group_id, name, salary, FIRST_VALUE(name) OVER (partition by group_id order by salary asc ) as lowest_sal_name from t order by group_id, name;
GROUP_ID NAME SALARY LOWEST_SAL
---------- ------------------------------ ---------- ----------
1 Tom 1200 Tom
2 Joe 800 Joe
2 Kary 2400 Joe
3 Andy 100 Andy
3 Ellen 200 Andy
3 Erick 300 Andy
3 Hou 400 Andy
3 Mary 500 Andy
3 Secooler 600 Andy
9 rows selected.
(2)在T表中添加一列,标识每一个数据分区中薪水最低的薪水值。
sec@ora10g> select group_id, name, salary, FIRST_VALUE(SALARY) OVER (partition by group_id order by salary asc ) as lowest_sal_name from t order by group_id, name;
GROUP_ID NAME SALARY LOWEST_SAL_NAME
---------- ------------------------------ ---------- ---------------
1 Tom 1200 1200
2 Joe 800 800
2 Kary 2400 800
3 Andy 100 100
3 Ellen 200 100
3 Erick 300 100
3 Hou 400 100
3 Mary 500 100
3 Secooler 600 100
9 rows selected.
3.小结
分析函数FIRST_VALUE可以非常便利并迅速的的得到排序后的第一条数据的各种信息,善用之。
有关分析函数的扩展可以参考Oracle的官方文档中的“Analytic Functions”描述:
Good luck.
secooler
10.01.15
-- The End --
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70034820/viewspace-2994200/
,如需转载,请注明出处,否则将追究法律责任。