Select Oracle 中的前两行
Select top two rows in Oracle
我试图只显示 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
哪个returns这个
B2 A 18.67
B4 B 17.57
B3 C 15.44
B1 D 13.99
但是,我只想要这个table的前两行。
我到底该怎么做?
使用 RowNUM :
用于指定记录条数为return。
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 开始,可以使用 RANK() 和 DENSE_RANK() 函数来确定 TOP N 行。示例:
Get the top 2 BRANCH using RANK()
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;
Get the top 2 BRANCH using DENSE_RANK()
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;
我试图只显示 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
哪个returns这个
B2 A 18.67
B4 B 17.57
B3 C 15.44
B1 D 13.99
但是,我只想要这个table的前两行。
我到底该怎么做?
使用 RowNUM :
用于指定记录条数为return。
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 开始,可以使用 RANK() 和 DENSE_RANK() 函数来确定 TOP N 行。示例:
Get the top 2 BRANCH using RANK()
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;
Get the top 2 BRANCH using DENSE_RANK()
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;