www.Orasql.Com
 
用户名: 密码:  验证码: 注册|找回密码 oracleawen's blog  
 
         当前位置 >> 技术论坛  发表帖子     论坛版块     查找帖子
row_number() over得到oracle的TOP3 sql-技术论坛||Oracle高手之路—Orasql.Com!
            row_number() over得到oracle的TOP3 sql
 
发贴人:oracle_awen
oracleawen@gmail.com448315233127.0.0.1
用户级别:管理员
发贴总数:1245
注册时间:2011-05-05 09:23:03
2012-02-13 21:42:20

数据如下,分别用了2个子查询和row_number() over 2个sql得到top3的结果(找出sal最多的3个降序排列,后面顺序不变)

SQL> select * from top3_order;

        ID        SAL
---------- ----------
         1      11231
        12     112312
        42    3412312
       552    2234312
         2          2
         4         67
        56      76577
        98       5645

已选择8行。

2个子查询:
 select id,
        sal
   from (select rn,id, sal, rownum rs
           from (select id, sal,rownum rn from top3_order order by sal desc))
  order by case
            when rs <= 3 then
             0
            else
             rn
          end

SQL> /
        ID        SAL
---------- ----------
        42    3412312
       552    2234312
        12     112312
         1      11231
         2          2
         4         67
        56      76577
        98       5645

已选择8行。


利用row_number() over:

select id, sal
  from (select rownum rn, id, sal, row_number() over(order by sal desc) rs
          from top3_order)
 order by case
            when rs <= 3 then
             0
            else
             rn
          end
SQL> /

        ID        SAL
---------- ----------
        42    3412312
       552    2234312
        12     112312
         1      11231
         2          2
         4         67
        56      76577
        98       5645

已选择8行。

 

      
 
  
 Orasql.Com|E-Mail:oracleawen@gmail.com|Phone:15271942915|Copyright © 2011|All Rights Reserved|