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

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

这个问题很难么?
Kilerd
2018-04-24 22:31:47 +08:00
某某同学,请独立完成 SQL 课程相关作业。
singleion
2018-04-25 08:45:19 +08:00
这条 sql 好像是错的!大神!
singleion
2018-04-25 08:45:45 +08:00
@WildCat 这条 sql 好像是错的!大神!
singleion
2018-04-25 08:46:14 +08:00
@Kilerd 😄😄
singleion
2018-04-25 08:49:07 +08:00
@swirling 这不是作业,我只是想练习 sql 文
singleion
2018-04-25 08:57:25 +08:00
@shiji 理解不了您的思路啊!我 sql 能力很弱,这个就是我在学习的练习题!
wd
2018-04-25 09:24:40 +08:00
感觉题目有点问题 是在小于 20 的人里面找前三 还是在前三里面找小于 20 的?
singleion
2018-04-25 09:31:57 +08:00
@wd 年龄小于 20 的条件下,在进行前三学生姓名查询,不矛盾啊!
shiji
2018-04-25 09:33:17 +08:00
@singleion 我的那个跟 SQL 没关系啊。 只是想问你怎么定义前三名。
shiji
2018-04-25 09:35:48 +08:00
@singleion
也就是假设
A 总共 100 分
B 总共 100 分
C 总共 99 分
D 总共 99 分
E 总共 98 分
那么你期望的输出是什么?
singleion
2018-04-25 14:13:49 +08:00
就是年龄 20 以内,总分排名前三的学生"姓名"查出来即可!
singleion
2018-04-25 14:14:17 +08:00
@shiji 就是年龄 20 以内,总分排名前三的学生"姓名"查出来即可!
singleion
2018-04-25 17:48:22 +08:00
@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://www.v2ex.com/t/449478

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

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

© 2021 V2EX