【SQL 學習】求一個表中列值的最前三名

楊奇龍發表於2010-11-06
表A是個職工工資表,現在你寫一個sql,實現如下功能:
1.返回表中所有結果
2.將工資最高的3個職工記錄資訊按工資從低到高排序放在查詢結果的前3個最高工資記錄
3.其他的記錄以正常的select結果輸出
寫一個sql來實現
利用
比較大小
select decode(sign(4-變數1),1,-變數1,變數1) from dual;
sign()函式根據某個值是0、正數還是負數,分別返回0、1、-1

SQL> select sign(3),sign(-3),sign(0) from dual ;
   SIGN(3)   SIGN(-3)    SIGN(0)                                                
---------- ---------- ----------                                                
         1         -1          0 
SQL> conn scott/yang
已連線。
SQL> select empno ,sal ,rn
  2  from
  3  (select empno ,sal ,row_number() over (order by sal desc ) rn from emp)
  4  order by decode(sign(4-rn),-rn,rn);

     EMPNO        SAL         RN                                                
---------- ---------- ----------                                                
      7839       5000          1                                                
      7902       3000          2                                                
      7788       3000          3                                                
      7566       2975          4                                                
      7698       2850          5                                                
      7782       2450          6                                                
      7369        800         14                                                
      7844       1500          8                                                
      7934       1300          9                                                
      7521       1250         10                                                
      7654       1250         11 
      7876       1100         12                                                
      7900        950         13                                                
      7499       1600          7                                                

已選擇14行。

SQL> select empno ,sal ,rn
  2  from
  3  (select empno ,sal ,row_number() over (order by sal desc ) rn from emp)
  4  order by decode(sign(4-rn),1,-rn,rn);

     EMPNO        SAL         RN                                                
---------- ---------- ----------                                                
      7788       3000          3                                                
      7902       3000          2                                                
      7839       5000          1                                                
      7566       2975          4                                                
      7698       2850          5                                                
      7782       2450          6                                                
      7499       1600          7                                                
      7844       1500          8                                                
      7934       1300          9                                                
      7521       1250         10                                                
      7654       1250         11                                                
      7876       1100         12                                                
      7900        950         13                                                
      7369        800         14                                                
已選擇14行。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-677657/,如需轉載,請註明出處,否則將追究法律責任。

相關文章