有一张学生表,分别有 id,name,age,chinese,math,english 六个字段,如何查出年龄小于 20,总成绩前三的学生名字?

2018 年 4 月 24 日
 singleion
3548 次点击
所在节点    Oracle
17 条回复
shiji
2018 年 4 月 24 日
年龄那个很简单。
难点在前三的定义。
A 简单粗暴分数从大到小排列。如果四个人都是满分,只能显示三个,而且并列的时候排名不公平
B 考虑并列,先找出三种最高成绩,然后反查学生。100 100 99 99 98 98 98 (两个第一 两个第二 三个第三)
C 考虑并列。100 100 99 99 (两个并列第一,两个并列第三,没有第二)
misaka19000
2018 年 4 月 24 日
给 50 块钱就帮你写
swirling
2018 年 4 月 24 日
请独立完成作业
WildCat
2018 年 4 月 24 日
SELECT *, (chinese + math + english) as sum_mark FROM students WHERE age < 20 ORDER BY sum_mark LIMIT 3;

这个问题很难么?
Kilerd
2018 年 4 月 24 日
某某同学,请独立完成 SQL 课程相关作业。
singleion
2018 年 4 月 25 日
这条 sql 好像是错的!大神!
singleion
2018 年 4 月 25 日
@WildCat 这条 sql 好像是错的!大神!
singleion
2018 年 4 月 25 日
@Kilerd 😄😄
singleion
2018 年 4 月 25 日
@swirling 这不是作业,我只是想练习 sql 文
singleion
2018 年 4 月 25 日
@shiji 理解不了您的思路啊!我 sql 能力很弱,这个就是我在学习的练习题!
wd
2018 年 4 月 25 日
感觉题目有点问题 是在小于 20 的人里面找前三 还是在前三里面找小于 20 的?
singleion
2018 年 4 月 25 日
@wd 年龄小于 20 的条件下,在进行前三学生姓名查询,不矛盾啊!
shiji
2018 年 4 月 25 日
@singleion 我的那个跟 SQL 没关系啊。 只是想问你怎么定义前三名。
shiji
2018 年 4 月 25 日
@singleion
也就是假设
A 总共 100 分
B 总共 100 分
C 总共 99 分
D 总共 99 分
E 总共 98 分
那么你期望的输出是什么?
singleion
2018 年 4 月 25 日
就是年龄 20 以内,总分排名前三的学生"姓名"查出来即可!
singleion
2018 年 4 月 25 日
@shiji 就是年龄 20 以内,总分排名前三的学生"姓名"查出来即可!
singleion
2018 年 4 月 25 日
@shiji select * from (
select * from (
select sum(t.CHINESE + t.MATH + t.ENGLISH) cj,t.name from student t where t.age<20 group by t.name ) t2
order by t2.cj desc )where rownum < 4

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/449478

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX