Oracle分析函数学习笔记1

时间:2007-12-23  来源:不详  作者:迈克DB
环境:windows 2000 server Oracle8.1.7 sql*plus

目的:以oracle自带的scott模式为测试环境,主要通过试验体会分析函数的用法。

1.row_number() 的使用
原表信息:

站长_之家

SQL> break on deptno skip 1 -- 为效果更明显,把不同部门的数据隔段显示。
SQL> select deptno,ename,sal
2 from emp
3 order by deptno,sal desc;

adminI5.com站.长.之.家

DEPTNO ENAME SAL
---------- ---------- ----------
10 KING 5000
CLARK 2450
MILLER 1300

admini5.com

20 SCOTT 3000
FORD 3000
JONES 2975
ADAMS 1100
SMITH 800

adminI5.com站长之_家

30 BLAKE 2850
ALLEN 1600
TURNER 1500
WARD 1250
MARTIN 1250
JAMES 950

站长_之家


已选择14行。

站长.之家adminI5.com


使用row_number()查出各部门薪水最高的三个员工姓名、薪水,多于三个的只取三个。

站长之_家

SQL> select * from (
2 select deptno,row_number() over(partition by deptno order by sal desc) rw,ename,sal
3 from emp
4 )
5 where rw<=3;

Admini5.com

DEPTNO RW ENAME SAL
---------- ---------- ---------- ----------
10 1 KING 5000
2 CLARK 2450
3 MILLER 1300

adminI5.com站长_之家

20 1 SCOTT 3000
2 FORD 3000
3 JONES 2975
站.长.之.家

30 1 BLAKE 2850
2 ALLEN 1600
3 TURNER 1500

站长之_家


已选择9行。

站长.之家adminI5.com

体会:row_number() 返回的主要是“行”的信息,并没有按照sal排名,如
20 1 SCOTT 3000
2 FORD 3000
scott与ford薪水一样多,ford前面的2仅仅是行数、记录条数的感念。
adminI5.com站长_之家

站长之.家adminI5.com

adminI5.com站长_之家

此文来自站长之家


看完这篇,您有何感觉呢?

文章评论

共有 0位Admini5网友发表了评论 查看完整内容