我花了最后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。

谢谢

最佳答案

在较新版本的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;

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

09-15 20:55