博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle之子查询:Top-N问题
阅读量:4920 次
发布时间:2019-06-11

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

学习了SQL子查询,遇到个Top-N问题,即:加入有张工资表(这里使用Oracle SCOTT用户的emp表),需要查找工资最高的3个员工信息,以下列格式输出:

乍眼一看,这很简单啊,对sal进行排序就可以了啊。

select rownum,empno,ename,salfrom emporder by sal desc;

但是,前面的行号呢?题目只要求输出前三行啊。。。

那这样可不可以呢?

select * from(select rownum,empno,ename,sal              from emp              order by sal desc)where rownum<=3;

结果:

行号不对!只好寻求伟大的度娘。。。

在oracle中有一个:rownum,是一个伪行,表示查询结果的行号

  1. 一旦生成就不会变化(会先按没有排序的时候生成rownum)
  2.rownum ,只能使用<或=,不能使用>或>=与=

明白了,原来,要想使用rownum求得Top-N,就得先排序得出结果,然后再使用rownum

select rownum,empno,ename,salfrom(select empno,ename,sal     from emp     order by sal desc)where rownum<=3;

执行结果:

 

转载于:https://www.cnblogs.com/Burgess-Fan/p/6793683.html

你可能感兴趣的文章
完全二叉树求结点左右孩子编号
查看>>
andriod读取php的json时出现的bom问题
查看>>
深入理解计算机系统 第九章 虚拟内存
查看>>
如何通过 WebP 自适应方案减少图片资源大小
查看>>
一个堆的c++实现
查看>>
git基本命令--tag, alias,
查看>>
string数据类型操作【四】
查看>>
ActiveMQ常见消息类型
查看>>
svn更换ip地址,重新地位
查看>>
Inmon和Kimball数仓建模思想
查看>>
android之android.intent.category.DEFAULT的用途和使用
查看>>
《mysql 必知必会》 笔记(四)
查看>>
程序、进程、线程的区别与联系以及多线程与多进程
查看>>
[hyper-V] centos 7 安装 java
查看>>
cmd(或者说DOS窗口)输出内容到文件
查看>>
matlab之sub2ind()函数
查看>>
弹出窗
查看>>
mysql 链接报 Can't connect to MySQL server on 'localhost' (10061)
查看>>
hdu 4288 Coder(单点操作,查询)
查看>>
HDU 4760 Good FireWall 完好Trie题解
查看>>