在 oracle 中显示前 2 个值(或后 2 个)

showing top 2 values (or bottom 2) in oracle

我当前的代码找到了平均值并显示了所有 4 个。我正在尝试 trim 它只显示最高 2 个最高平均值的信息 .我的当前代码如下。

SELECT BRANCHSUBURB, AVG(SESSIONPRICE)
FROM BRANCH NATURAL JOIN SESSIONS 
GROUP BY BRANCHSUBURB
ORDER BY AVG(SESSIONPRICE) ASC;

我想只显示底部的 2 个值(这将是最高的) 或者,如果它会更容易,显示前 2 个值(并按降序排序)

在 Oracle 中,您可以使用子查询:

SELECT *
FROM (SELECT BRANCHSUBURB, AVG(SESSIONPRICE)
      FROM BRANCH NATURAL JOIN SESSIONS 
      GROUP BY BRANCHSUBURB
      ORDER BY AVG(SESSIONPRICE) ASC
     ) x
WHERE rownum <= 2;

在 Oracle 12c+ 中,您可以使用 ANSI 标准功能,因此不需要子查询:

SELECT BRANCHSUBURB, AVG(SESSIONPRICE)
FROM BRANCH NATURAL JOIN SESSIONS 
GROUP BY BRANCHSUBURB
ORDER BY AVG(SESSIONPRICE) ASC
FETCH FIRST 2 ROWS ONLY;