Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择Oracle中最上面的两行_Sql_Oracle_Greatest N Per Group - Fatal编程技术网

Sql 选择Oracle中最上面的两行

Sql 选择Oracle中最上面的两行,sql,oracle,greatest-n-per-group,Sql,Oracle,Greatest N Per Group,我试图只显示Oracle中最上面的两行,但是我没有看到任何有效的东西 我现在有 SELECT BRANCH.BRANCHID, BRANCHNAME, AVG(SESSIONPRICE) FROM BRANCH, SESSIONS WHERE SESSIONS.BRANCHID = BRANCH.BRANCHID GROUP BY BRANCHNAME, BRANCH.BRANCHID ORDER BY AVG(SESSIONPRICE) DESC 哪个返回这个 B2 A 1

我试图只显示Oracle中最上面的两行,但是我没有看到任何有效的东西

我现在有

SELECT BRANCH.BRANCHID, BRANCHNAME, AVG(SESSIONPRICE)
FROM BRANCH, SESSIONS
WHERE SESSIONS.BRANCHID = BRANCH.BRANCHID
GROUP BY BRANCHNAME, BRANCH.BRANCHID
ORDER BY AVG(SESSIONPRICE) DESC
哪个返回这个

B2      A     18.67
B4      B     17.57
B3      C     15.44
B1      D     13.99
但是,我只想要这个表的前两行

我到底该怎么做呢?

使用RowNUM:

它用于指定要返回的记录数

            SELECT BRANCH.BRANCHID, BRANCHNAME, AVG(SESSIONPRICE)
            FROM BRANCH, SESSIONS
            WHERE 
            ROWNUM <= 2 and SESSIONS.BRANCHID = BRANCH.BRANCHID
            GROUP BY BRANCHNAME, BRANCH.BRANCHID
            ORDER BY AVG(SESSIONPRICE) DESC ;

我再次编辑了答案:

SELECT *
FROM (SELECT BRANCH.BRANCHID, BRANCHNAME, AVG(SESSIONPRICE)
FROM BRANCH, SESSIONS
WHERE SESSIONS.BRANCHID = BRANCH.BRANCHID

GROUP BY BRANCHNAME, BRANCH.BRANCHID
ORDER BY AVG(SESSIONPRICE) DESC
)
WHERE ROWNUM <= 2;

从Oracle 9i开始,秩和稠密秩函数可用于确定前N行。示例:

使用秩获得前2个分支

使用稠密_秩获得前2个分支


只取前两行你试过了吗?是的,我试过了,但我找不到解决方案,我学习SQL才两周。很多我都不明白,我试过了,但是它改变了第三行的值。你知道它为什么会这样吗?这不会正常工作的。请参阅手册了解详细信息:太棒了,非常感谢您,经过编辑的手册工作得非常好。谢谢!特别感谢一个没有名字的马的帮助。现在我刚刚收到一个错误“FROM关键字not found where expected”更新了我的ans立即检查。
SELECT ename, sal 
  FROM ( SELECT BRANCH.BRANCHID, BRANCHNAME, AVG(SESSIONPRICE) RANK() OVER (ORDER BY AVG(SESSIONPRICE) DESC) avg_rank
           FROM BRANCH) 
 WHERE avg_rank<= 2;
SELECT ename, sal 
  FROM ( SELECT BRANCH.BRANCHID, BRANCHNAME, AVG(SESSIONPRICE) DENSE_RANK() OVER (ORDER BY AVG(SESSIONPRICE) DESC) avg_Dense_rank
           FROM BRANCH) 
 WHERE avg_Dense_rank<= 2;