我花了最后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。
由于
答案 0 :(得分:7)
ext_localconf.php
答案 1 :(得分:6)
在较新版本的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;
有关rownum的进一步说明,请参阅https://www.techonthenet.com/oracle/questions/top_records.php。
答案 2 :(得分:5)
最新的Oracle版本有FETCH FIRST
:
SELECT BRANCHID, AVG(SESSIONPRICE)
FROM SESSIONS
GROUP BY BRANCHID
ORDER BY AVG(SESSIONPRICE) DESC
FETCH FIRST 2 ROWS ONLY
对于较旧的Oracle版本,请使用ROWNUM
。可能类似于:
select * from
(
SELECT BRANCHID, AVG(SESSIONPRICE)
FROM SESSIONS
GROUP BY BRANCHID
ORDER BY AVG(SESSIONPRICE) DESC
) dt
WHERE ROWNUM <= 2
答案 3 :(得分:2)
<强>已更新强>
SELECT *
FROM
(SELECT BRANCHID,
AVG(SESSIONPRICE)
FROM SESSIONS
GROUP BY BRANCHID
ORDER BY AVG(SESSIONPRICE) DESC FETCH FIRST 2 ROWS ONLY)
WHERE rownum <= 2;
<小时/> 参考:
答案 4 :(得分:1)
使用SQL LIMIT命令限制结果数 如果不使用MySQL,则为SQL TOP。
两者都做同样的事情。
使用SQL LIMIT命令限制结果数 如果不使用MySQL,则为SQL TOP。
两者都做同样的事情。
与TOP
SELECT TOP 2 BRANCHID, AVG(SESSIONPRICE)
FROM SESSIONS
GROUP BY BRANCHID
ORDER BY AVG(SESSIONPRICE) DESC;