现在在一个成绩表(学生姓名,课程名称,成绩) tb_score(studentName,subjectName,score)
要求查询出此表中各课成绩前三名的记录
要求查询出此表中各课成绩前三名的记录
解决方案 »
- 请教关于crs_stat -t -v 的Target列和State列的状态有什么不同?
- isqlplus 里面运行的语句是PL/SQL 还是SQL 尼?
- 麻烦帮我写一条SQL语句
- RMAN备份怎么将本地备份到远程主机去?
- 如何删除表空间中的某个数据文件
- 访问表的速度问题
- 关于并行服务器中的jdbc编程?如何使用Service_name而不是单独的一个instance名称?
- function中默认Boolean参数的问题
- 200分请求高手帮忙:把Oracle8.17的数据库备份转换成Sql Server 7.0的数据库备份
- win7 64位操作系统,安装ORACLE_11g_R2,出现PATH太长的错误,求解决方法
- 高分求助,各位大人^_^
- 在oracle里如何定义一个数组呢?各位大哥帮帮忙!!急~
from (SELECT rank() over(partition by a.subjectName order by a.score desc) as num,studentName, subjectName, score
FROM tb_score a
) b
where b.num <= 3
group by score desc
SELECT studentName, subjectName, score FROM tb_score a WHERE (SELECT count(*) FROM tb_score b WHERE b.score > a.score and b.subjectName = a.subjectName) <3;
我只想到了用分析函数来做,我当时看到你的SQL才感觉到高手就是不一样啊.
虽然有点小失误,但方法还是正确的.
改进一下,就看得更清楚了:SELECT subjectName,studentName, score FROM
tb_score a
WHERE (SELECT count(*) FROM tb_score b WHERE b.score > a.score and
b.subjectName = a.subjectName) <3
ORDER BY SUBJECTNAME,SCORE DESC,STUDENTNAME这是按每门课的前3名排序后的结果。