表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