如何只显示前2行?

时间:2016-10-03 10:26:00

标签: sql oracle

我花了最后2个小时搜索这个,我尝试过的每件事都没有奏效。我有一个table_Sessions,我想为其返回BranchID和每个会话的平均成本。但我只想显示前2名的平均值。

我真的尝试过我遇到过的一切。要么它不适合我的情况,要么我错了。不管怎样,我在这里疯了。

这是我到目前为止所做的事情,它似乎做了我想要的80%(最后20%仅显示前2个最高平均成本)

SELECT BRANCHID, AVG(SESSIONPRICE)
FROM SESSIONS 
GROUP BY BRANCHID
ORDER BY AVG(SESSIONPRICE) DESC;

如果有人可以告诉我如何追加它,我会非常感激它。我正在使用Oracle SQL Developer。

由于

5 个答案:

答案 0 :(得分:7)

ext_localconf.php

答案 1 :(得分:6)

在较新版本的Oracle(12c及以上版本)中,您可以使用Fetch First,即:

SELECT BRANCHID, AVG(SESSIONPRICE)
FROM SESSIONS 
GROUP BY BRANCHID
ORDER BY AVG(SESSIONPRICE) DESC
FETCH FIRST 2 ROWS ONLY;

在旧版本中,您可以使用rownum。但是,为此,我们需要确保首先评估您的排序,因此您需要将现有查询放在子查询中,然后将WHERE子句添加到其中以按rownum进行过滤。

例如:

SELECT * FROM
    (SELECT BRANCHID, AVG(SESSIONPRICE)
    FROM SESSIONS 
    GROUP BY BRANCHID
    ORDER BY AVG(SESSIONPRICE) DESC) myQuery
WHERE rownum <= 2;

有关rownum的进一步说明,请参阅https://www.techonthenet.com/oracle/questions/top_records.php

答案 2 :(得分:5)

最新的Oracle版本有FETCH FIRST

SELECT BRANCHID, AVG(SESSIONPRICE)
FROM SESSIONS 
GROUP BY BRANCHID
ORDER BY AVG(SESSIONPRICE) DESC
FETCH FIRST 2 ROWS ONLY

对于较旧的Oracle版本,请使用ROWNUM。可能类似于:

select * from
(
    SELECT BRANCHID, AVG(SESSIONPRICE)
    FROM SESSIONS 
    GROUP BY BRANCHID
    ORDER BY AVG(SESSIONPRICE) DESC
) dt
WHERE ROWNUM <= 2

答案 3 :(得分:2)

<强>已更新

SELECT *
FROM
  (SELECT BRANCHID,
          AVG(SESSIONPRICE)
   FROM SESSIONS
   GROUP BY BRANCHID
   ORDER BY AVG(SESSIONPRICE) DESC FETCH FIRST 2 ROWS ONLY)
WHERE rownum <= 2; 

<小时/> 参考:

答案 4 :(得分:1)

使用SQL LIMIT命令限制结果数 如果不使用MySQL,则为SQL TOP。

两者都做同样的事情。

使用SQL LIMIT命令限制结果数 如果不使用MySQL,则为SQL TOP。

两者都做同样的事情。

与TOP

SELECT TOP 2 BRANCHID, AVG(SESSIONPRICE)
FROM SESSIONS 
GROUP BY BRANCHID
ORDER BY AVG(SESSIONPRICE) DESC;