如何在订购后限制oracle查询返回的行数?

0 sql oracle oracle11g

我知道这是一个重复的问题,但其他帖子并没有解决我的问题.

我试图只显示由以下查询产生的前2行.

SELECT
    AVG(sessionprice),
    branchsuburb
FROM    branch,
        sessions
WHERE branch.branchid = sessions.branchid
GROUP BY branchsuburb
ORDER BY AVG(sessionprice) DESC;
Run Code Online (Sandbox Code Playgroud)

该查询将返回所有结果,但我希望将其限制为仅排在前2位(就哪一行具有最高平均值而言).我在这篇文章中尝试了fetch函数 如何在订购后限制Oracle查询返回的行数? 但它只是返回一个ORA-00933错误.我知道我一定是犯了一些愚蠢的错误,但我无法弄清楚.有没有办法在不使用子查询的情况下执行此操作?

添加fetch函数后的代码如下所示

SELECT
    AVG(SESSIONPRICE),
    BRANCHSUBURB
FROM    BRANCH,
        SESSIONS
WHERE BRANCH.BRANCHID = SESSIONS.BRANCHID
GROUP BY BRANCHSUBURB
ORDER BY AVG(SESSIONPRICE) DESC
FETCH FIRST 2 ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

FETCH最近在Oracle中推出.在旧版本中,您需要使用子查询:

SELECT bs.*
FROM (SELECT avg(sessionprice), branchsuburb
      FROM branch b JOIN
           sessions s
           ON b.branchid = s.branchid
      GROUP BY branchsuburb
      ORDER BY avg(sessionprice) DESC
     ) bs
WHERE rownum <= 2;
Run Code Online (Sandbox Code Playgroud)