一道Oracle SQL面试题及解答

某位同学发给我的面试题 :

用一条sql语句查出员工工资表所有信息,工资最高的前三条信息按升序排在最前面, 其余的按原顺序排列


下面我们解答一下,我们以scott.emp为数据表来进行解答。


select (case
         when sal_rn >= 4 then
          0
         else
          sal_rn
       end) xxxx,  --只保留工资最高的三个人的排序序号,其他都修改为相同的数字0 由于后面使用降序排列,修改为0能保证其他行在下面,并且按照原来rownum排序
       e.*
  from (select rownum sal_rn, --按照工资降序排列的顺序
               e.*  
          from (select rownum yuan_rn,  --保留rownum及保存原顺序
                 e.* from scott.emp e order by sal desc) e) e
 order by xxxx desc, yuan_rn


你可能感兴趣的:(sql,oracle面试题)