Sql 如何仅显示前2行?
我花了两个小时来寻找这个,但我尝试过的每一件事都没有奏效。我有一个table_会话,我想返回每个会话的平均成本和平均成本。但我只想展示前两名的平均值 我真的尝试了我遇到的一切。要么它不适合我的情况,要么我把它挪用错了。不管怎样,我都快疯了 这是我到目前为止所做的,我希望它能持续20%的时间,它似乎只显示了前2名的最高平均成本Sql 如何仅显示前2行?,sql,oracle,Sql,Oracle,我花了两个小时来寻找这个,但我尝试过的每一件事都没有奏效。我有一个table_会话,我想返回每个会话的平均成本和平均成本。但我只想展示前两名的平均值 我真的尝试了我遇到的一切。要么它不适合我的情况,要么我把它挪用错了。不管怎样,我都快疯了 这是我到目前为止所做的,我希望它能持续20%的时间,它似乎只显示了前2名的最高平均成本 SELECT BRANCHID, AVG(SESSIONPRICE) FROM SESSIONS GROUP BY BRANCHID ORDER BY AVG(SESSI
SELECT BRANCHID, AVG(SESSIONPRICE)
FROM SESSIONS
GROUP BY BRANCHID
ORDER BY AVG(SESSIONPRICE) DESC;
如果有人能告诉我如何附加到它,我将非常感激。我正在使用Oracle SQL Developer
谢谢较新的Oracle版本已先获取: 对于较旧的Oracle版本,请使用useROWNUM。可能是这样的:
select * from
(
SELECT BRANCHID, AVG(SESSIONPRICE)
FROM SESSIONS
GROUP BY BRANCHID
ORDER BY AVG(SESSIONPRICE) DESC
) dt
WHERE ROWNUM <= 2
更新
参考:
在较新版本的Oracle 12c及更高版本中,您可以先使用Fetch,即: 在旧版本中,可以使用rownum。但是,为此,我们需要确保首先计算您的排序,因此您需要将现有查询放入子查询中,然后将WHERE子句添加到该子查询中,以按rownum进行筛选 例如:
SELECT * FROM
(SELECT BRANCHID, AVG(SESSIONPRICE)
FROM SESSIONS
GROUP BY BRANCHID
ORDER BY AVG(SESSIONPRICE) DESC) myQuery
WHERE rownum <= 2;
有关rownum的详细说明,请参阅。使用SQL LIMIT命令限制结果数 如果不使用MySQL,则使用SQL TOP 两者都做同样的事情
使用SQL LIMIT命令限制结果数 如果不使用MySQL,则使用SQL TOP 两者都做同样的事情 带上衣
SELECT TOP 2 BRANCHID, AVG(SESSIONPRICE)
FROM SESSIONS
GROUP BY BRANCHID
ORDER BY AVG(SESSIONPRICE) DESC;
甲骨文不是也有rownum吗?像这样:ROWNUM这给了我一个SQL命令,从FETCH FIRST的行和行开始没有正确结束,看起来您的Oracle版本对于FETCH FIRST来说太旧了。请查看rownum。@jarlh我认为您必须包括;在end@jarlh我也签出了rownum,每次它给我一个GROUPBY或ORDERBY错误,这给我一个SQL未正确结束错误。从提取行开始FIRST@RobBor:检查此查询。第二个例子:使用rownum有效!谢谢。既然我看到了,我早该知道的!德拉茨。再次感谢!成功谢谢如果有两个以上的branchid共享前两个avgsessionprice,会发生什么情况?你仍然只想显示2行吗?是的,但我没有这样的案例如果这是一个家庭作业问题,那么这就不是什么大问题了。如果是为了报告生产系统,那么它就变得更重要了。如果您真的只关心前两行,并且您确实有两个或两个以上的用户共享前两个平均会话价格中的一个,那么您是否关心您的查询报告的BranchId是否会因运行而异?因为如果您确实关心,那么您应该在ORDERBY子句中引入额外的元素,以确保在发生连接时顺序是固定的。例如,按AVGSESSIONPRICE DESC、branchid asc订购
SELECT (BRANCHID,AVGPRICE
FROM (SELECT BRANCHID, AVG(SESSIONPRICE) as AVGPRICE
FROM SESSIONS
GROUP BY BRANCHID
ORDER BY AVG(SESSIONPRICE) DESC)
WHERE rownum <= 2;
SELECT BRANCHID, AVG(SESSIONPRICE)
FROM SESSIONS
GROUP BY BRANCHID
ORDER BY AVG(SESSIONPRICE) DESC
FETCH FIRST 2 ROWS ONLY;
SELECT * FROM
(SELECT BRANCHID, AVG(SESSIONPRICE)
FROM SESSIONS
GROUP BY BRANCHID
ORDER BY AVG(SESSIONPRICE) DESC) myQuery
WHERE rownum <= 2;
SELECT TOP 2 BRANCHID, AVG(SESSIONPRICE)
FROM SESSIONS
GROUP BY BRANCHID
ORDER BY AVG(SESSIONPRICE) DESC;