我知道这是一个重复的问题,但其他帖子并没有解决我的问题.
我试图只显示由以下查询产生的前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)
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)