zoukankan      html  css  js  c++  java
  • Oracle之子查询:Top-N问题

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

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

    select rownum,empno,ename,sal
    from emp
    order 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,sal
    from(select empno,ename,sal
         from emp
         order by sal desc)
    where rownum<=3;

    执行结果:

  • 相关阅读:
    1.1.24 制作红头文件
    1.1.23 文档页末空白行删不掉
    kernel enable specific directory DEBUG
    kernel lcd blank interface
    git show (15)
    git log (14)
    Android bootchart (一)
    kernel parameter [nosmp | maxcpus=0]
    kernel get clock info
    kernel bootargs consoleblank
  • 原文地址:https://www.cnblogs.com/Burgess-Fan/p/6793683.html
Copyright © 2011-2022 走看看