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