Chinaunix首页 | 论坛 | 博客
  • 博客访问: 606232
  • 博文数量: 841
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-28 10:08
文章分类

全部博文(841)

文章存档

2011年(1)

2008年(840)

我的朋友

分类:

2008-10-28 10:11:53


  环境:windows 2000 server + 8.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;
  
  DEPTNO ENAME       SAL
  ---------- ---------- ----------
      10 KING       5000
        CLARK      2450
        MILLER      1300
  
      20 SCOTT      3000
        FORD       3000
        JONES      2975
        ADAMS      1100
        SMITH       800
  
      30 BLAKE      2850
        ALLEN      1600
        TURNER      1500
        WARD       1250
        MARTIN      1250
        JAMES       950
  
  
  已选择14行。
  
  
  使用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;
    DEPTNO     RW ENAME       SAL
  ---------- ---------- ---------- ----------
      10     1 KING       5000
            2 CLARK      2450
            3 MILLER      1300
  
      20     1 SCOTT      3000
            2 FORD       3000
            3 JONES      2975
  
      30     1 BLAKE      2850
            2 ALLEN      1600
            3 TURNER      1500
  
  
  已选择9行。
  
  体会:row_number() 返回的主要是“行”的信息,并没有按照sal排名,如
  20     1 SCOTT      3000
  2 FORD       3000
  scott与ford薪水一样多,ford前面的2仅仅是行数、记录条数的感念。
【责编:admin】

--------------------next---------------------

阅读(261) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~