一道数据库题(写出SQL语句):
成绩表中有三列:学生名,课程名,成绩,该表记录了30名学生的5门课程的成绩,下面有两道题:
1、查询出该表中所有课程的前三名(包含并列的),提示:可不只有三人啊~~2、查询出该表中总成绩的前三名(包含并列的)
成绩表中有三列:学生名,课程名,成绩,该表记录了30名学生的5门课程的成绩,下面有两道题:
1、查询出该表中所有课程的前三名(包含并列的),提示:可不只有三人啊~~2、查询出该表中总成绩的前三名(包含并列的)
解决方案 »
- 如果将文件都保存在数据库的blob字段中,如果文件一多,数据库的效率是不是下降很快?
- 求RMAN备份学习资料
- 我能删除库中的哪些用户?
- 请问关于ORAKILL命令出错错误号是2,这个错误如何解决?
- oracle 中replace替换回车换行符号无效
- 请问如何设置可以用windows系统帐户访问用户xuser的表?
- 求助:创建表时出现错误: ora-00922
- 模糊查询 表A中有一些记录如 "12??5" ,"1?3?5",“?23?5","?2???" ,寻查询的SQL语句!
- 谁有JDEVLOPER开发工具??如何下载?
- 急!!高手们快快进来阿!!!
- pl/sql developer设置的问题 答一送一共70分
- 死连接SESSION的立即处理
这个分析函数
余下的自己GOOGLE下学得快,否则别人写好的,你也不知道为什么要用这个
第一道题给你做了,第二题自已来吧。SQL> select * from student;NAME CLASS SCORE
-------- ------------------ ----------
张三 操作系统 88
李四 操作系统 90
王五 操作系统 98
赵六 操作系统 88
孙七 操作系统 60
孙七 数据结构 90
赵六 数据结构 88
张三 数据结构 88
李四 数据结构 93
周二 数据结构 6610 rows selectedSQL>
SQL> select name, class, score, rk
2 from (select class,
3 name,
4 score,
5 rank() over(partition by class order by score desc) rk
6 from student
7 order by score desc)
8 where rk <= 3
9 order by class;NAME CLASS SCORE RK
-------- ------------------ ---------- ----------
王五 操作系统 98 1
李四 操作系统 90 2
赵六 操作系统 88 3
张三 操作系统 88 3
李四 数据结构 93 1
孙七 数据结构 90 2
赵六 数据结构 88 3
张三 数据结构 88 38 rows selectedSQL>
1、
select 学生名, 课程名, 成绩
from (select 学生名,
课程名,
成绩,
row_number() over(partition by 课程名 order by 成绩) rn
from student)
where rn <= 3;
2、select 学生名, 总成绩
from (select 学生名, 总成绩, rank() over(order by 总成绩) rk
from (select 学生名, sum(成绩) 总成绩 from student group by 学生名))
where rk <= 3
SELECT 学生名, 课程名, 成绩
FROM (SELECT 学生名,
课程名,
成绩,
RANK() OVER(PARTITION BY 课程名 ORDER BY 成绩 DESC) RN
FROM YOURTABLE)
WHERE RN <= 3;
SELECT 学生名, SS 总成绩
FROM (SELECT 学生名, SS, RANK() OVER(ORDER BY SS DESC) RS
FROM (SELECT 学生名, SUM(成绩) SS FROM YOURTABLE GROUP BY 学生名))
WHERE RS <= 3;