天天看點

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

表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行。

  4  order by decode(sign(4-rn),1,-rn,rn);

      7654       1250         11