【SQL 学习】求一个表中列值的最前三名-阿里云开发者社区

开发者社区> 北在南方> 正文

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

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
作为程序员的他,大学四年一直自学,全靠这些实用工具和学习网站!
作为程序员的他,大学四年一直自学,全靠这些实用工具和学习网站!
4 0
推荐10个堪称神器的学习网站
推荐10个堪称神器的学习网站
6 0
细说一下RedisTemplate的使用方法(二)
执行自定义SQL方法时,调用的就是execute方法。execute方法是一个很宽泛的方法,其他专注特定的Redis数据类型封装的方法都是基于此方法。这就说明了其他方法能实现的,execute方法也能实现。
5 0
Redis应用之缓存实现
Redis的众多应用场景中缓存绝对是频率最高的场景了。本文来介绍下Redis作为缓存要注意的地方。
4 0
当推荐遇到社交:美图的推荐算法设计优化实践
本文是美图高级算法专家汤斌的一篇文章,重点介绍了社交网络背景下推荐算法面临的挑战,以及应对的方法。
5 0
Spring中使用的设计模式
Spring框架是每个java程序猿入门级的框架也是最重要的框架,而Spring中也采用了很多的设计模式,这些也会成为我们面试过程中经常会问到的问题,所以本文就整理出Spring中具体使用的哪些设计模式。
4 0
详细分析MyBatis框架中exists的基本使用
本篇文章中主要介绍了MyBatis框架中exists的基本用法。在介绍exists的用法的同时,也介绍了not exists的基本使用,说明了exists和in在使用过程中的区别。使用一个具体示例对MyBatis框架中使用exists进行具体详细的说明。最后对SQL中的in,not in,exists,not exists之间的区别进行总结说明。
4 0
Oracle最新的Sql笔试题及答案
Oracle最新的Sql笔试题及答案
6 0
【愚公系列】2021年11月 C#版 数据结构与算法解析(线段树)
【愚公系列】2021年11月 C#版 数据结构与算法解析(线段树)
6 0
pringMVC教程6[Restful和拦截器]
pringMVC教程6[Restful和拦截器]
4 0
+关注
640
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载