singleion
V2EX  ›  Oracle

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

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

这个问题很难么?
Kilerd
   5
Kilerd  
   2018 年 4 月 24 日
某某同学,请独立完成 SQL 课程相关作业。
singleion
   6
singleion  
OP
   2018 年 4 月 25 日
这条 sql 好像是错的!大神!
singleion
   7
singleion  
OP
   2018 年 4 月 25 日
@WildCat 这条 sql 好像是错的!大神!
singleion
   8
singleion  
OP
   2018 年 4 月 25 日
@Kilerd 😄😄
singleion
   9
singleion  
OP
   2018 年 4 月 25 日
@swirling 这不是作业,我只是想练习 sql 文
singleion
   10
singleion  
OP
   2018 年 4 月 25 日
@shiji 理解不了您的思路啊!我 sql 能力很弱,这个就是我在学习的练习题!
wd
   11
wd  
   2018 年 4 月 25 日 via iPhone
感觉题目有点问题 是在小于 20 的人里面找前三 还是在前三里面找小于 20 的?
singleion
   12
singleion  
OP
   2018 年 4 月 25 日
@wd 年龄小于 20 的条件下,在进行前三学生姓名查询,不矛盾啊!
shiji
   13
shiji  
   2018 年 4 月 25 日
@singleion 我的那个跟 SQL 没关系啊。 只是想问你怎么定义前三名。
shiji
   14
shiji  
   2018 年 4 月 25 日
@singleion
也就是假设
A 总共 100 分
B 总共 100 分
C 总共 99 分
D 总共 99 分
E 总共 98 分
那么你期望的输出是什么?
singleion
   15
singleion  
OP
   2018 年 4 月 25 日
就是年龄 20 以内,总分排名前三的学生"姓名"查出来即可!
singleion
   16
singleion  
OP
   2018 年 4 月 25 日
@shiji 就是年龄 20 以内,总分排名前三的学生"姓名"查出来即可!
singleion
   17
singleion  
OP
   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
© 2026 V2EX · 40ms · 3.9.8.5