先排序,在取rownum<4
select * from (select * from 表名 order by 成绩 desc) where rownum<4
select * from (select * from 表名 order by 成绩 desc) where rownum<4
解决方案 »
- DB2安装问题
- oracle 11g的SQLDevelop报12505错误,但是使用SQL*PLUS可以正常连接?
- 求助怎样快速的将oracle 远程数据库导入导出
- schema 大家有什么要说的吗
- 怎样才能在pl/sql中使用htp函数包?
- 简单SQL问题
- 如何新建数据库
- Oracle8i和JSP中存储和显示中文的问题
- 初级问题,在sql plus中写的sql语句按菜单运行时怎么只是回车,没有结果?
- 关于ODBC中ORALCE的驱动程序
- [急救]PROCEDURE的问题。
- oracle中“Intersect”,“Minus”求交集和差集的两个关键字应该怎么用?,麻烦请给出例子。谢谢各位高手。
正确的办法应该是先获得rownum=3的成绩,然后把所有成绩大于这个成绩的都列出来才是正解
from t1
where grade > =( select grade
from (select grade
from t1 t
order by grade)
where rownow=3);
上边说的不太妥当,如果第三名的成绩有相同的多个人,那应该怎么样呢?
正确的办法应该是先获得rownum=3的成绩,然后把所有成绩大于这个成绩的都列出来才是正解情况1:前三名都是100fen,那么前三名就是前三名就是并列第一,也就是千三名。
情况2:第一名是100,第二三名都是98,那么第一名是100,并列2名,前三名都有了。
情况3:第一名100,第二名98,第三名95 第四名95 那么前三名应该是四个人,三名和四名并列第三。.................这种情况是上头最不爱看到的,发奖品超出了,呵呵。
select * (select rank() over(order by score) rank ,t1.* from t1) where rank < 4
结果:
rank name score
1 a 100
2 b 99
2 c 99
2 d 99
5 e 98
6 f 97select * (select DENSE_RANK() over(order by score desc) rank ,t1.* from t1) where rank < 5
结果:
rank name score
1 a 100
2 b 99
2 c 99
2 d 99
3 e 98
4 f 97
2 select ename,job,sal,row_number() over(order by sal desc) rid from emp
3 ) t
4 where t.rid<=3; RID ENAME JOB SAL
---------- ---------- --------- ----------
1 KING PRESIDENT 5000
2 SCOTT ANALYST 3000
3 FORD ANALYST 3000SQL>