环境:windows 2000 server + Oracle8.1.7 + sql*plus
目的:以oracle自带的scott模式为测试环境,主要通过试验体会分析函数的用法。
1.row_number() 的使用
原表信息:
SQL
break on deptno skip 1-- 为效果更明显,把不同部门的数据隔段显示。
SQL select deptno,ename,sal
2from emp
3order by deptno,sal desc;
DEPTNO ENAME SAL
---------- ---------- ----------
10 KING 5000
CLARK2450
MILLER 1300
20 SCOTT3000
FORD 3000
JONES2975
ADAMS1100
SMITH 800
30 BLAKE2850
ALLEN1600
TURNER 1500
WARD 1250
MARTIN 1250
JAMES 950
已选择14行。
使用row_number()查出各部门薪水最高的三个员工姓名、薪水,多于三个的只取三个。
SQL select * from (
2select deptno,row_number() over(partition by deptno order by sal desc) rw,ename,sal
3from emp
4)
5where rw
DEPTNO RW ENAME SAL
---------- ---------- ---------- ----------
101 KING 5000
2 CLARK2450
3 MILLER 1300
201 SCOTT3000
2 FORD 3000
3 JONES2975
301 BLAKE2850
2 ALLEN1600
3 TURNER 1500
已选择9行。
体会:row_number() 返回的主要是“行”的信息,并没有按照sal排名,如
201 SCOTT3000
2 FORD 3000
scott与ford薪水一样多,ford前面的2仅仅是行数、记录条数的感念。