博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【SQL 学习】求一个表中列值的最前三名
阅读量:7020 次
发布时间:2019-06-28

本文共 1087 字,大约阅读时间需要 3 分钟。

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

转载地址:http://bicxl.baihongyu.com/

你可能感兴趣的文章
webpack系列之五module生成1
查看>>
关于Spring Cloud—环境变化
查看>>
吴颖二:12.13 晚评 美联储加息决议会否引起多头者“猛攻”
查看>>
Foundation中的类簇和Swizzle
查看>>
最新iOS面试真题大全
查看>>
Hibernate初级入门
查看>>
3. 怎么解决拖延问题?
查看>>
关于redis的几件小事(八)缓存与数据库双写时的数据一致性
查看>>
console常用命令总结笔记
查看>>
深入的聊聊 Java NIO
查看>>
什么?Linux 终端也可以用来看女神照片?
查看>>
JavaScript常见知识点总结
查看>>
npm更新和nodejs更新
查看>>
CentOS 7安装nginx+php+mysql环境
查看>>
基于SpringBoot+STOMP协议实现的web聊天室
查看>>
Promise 快速入门学习笔记
查看>>
知乎 Android 客户端组件化实践
查看>>
github 命令行
查看>>
Android 面试题问题与答案个人整理(动画篇)
查看>>
VARCHART XGantt .NET的最佳实践:通过表交互式交换任务
查看>>