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