首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
宝塔
V2EX  ›  Oracle

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

  •  
  •   singleion · 2018-04-24 16:41:47 +08:00 · 1665 次点击
    这是一个创建于 574 天前的主题,其中的信息可能已经有所发展或是发生改变。
    17 回复  |  直到 2018-04-25 17:48:22 +08:00
        1
    shiji   2018-04-24 16:58:00 +08:00 via Android
    年龄那个很简单。
    难点在前三的定义。
    A 简单粗暴分数从大到小排列。如果四个人都是满分,只能显示三个,而且并列的时候排名不公平
    B 考虑并列,先找出三种最高成绩,然后反查学生。100 100 99 99 98 98 98 (两个第一 两个第二 三个第三)
    C 考虑并列。100 100 99 99 (两个并列第一,两个并列第三,没有第二)
        2
    misaka19000   2018-04-24 17:06:47 +08:00
    给 50 块钱就帮你写
        3
    swirling   2018-04-24 17:09:08 +08:00
    请独立完成作业
        4
    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;

    这个问题很难么?
        5
    Kilerd   2018-04-24 22:31:47 +08:00
    某某同学,请独立完成 SQL 课程相关作业。
        6
    singleion   2018-04-25 08:45:19 +08:00
    这条 sql 好像是错的!大神!
        7
    singleion   2018-04-25 08:45:45 +08:00
    @WildCat 这条 sql 好像是错的!大神!
        8
    singleion   2018-04-25 08:46:14 +08:00
    @Kilerd 😄😄
        9
    singleion   2018-04-25 08:49:07 +08:00
    @swirling 这不是作业,我只是想练习 sql 文
        10
    singleion   2018-04-25 08:57:25 +08:00
    @shiji 理解不了您的思路啊!我 sql 能力很弱,这个就是我在学习的练习题!
        11
    wd   2018-04-25 09:24:40 +08:00 via iPhone
    感觉题目有点问题 是在小于 20 的人里面找前三 还是在前三里面找小于 20 的?
        12
    singleion   2018-04-25 09:31:57 +08:00
    @wd 年龄小于 20 的条件下,在进行前三学生姓名查询,不矛盾啊!
        13
    shiji   2018-04-25 09:33:17 +08:00
    @singleion 我的那个跟 SQL 没关系啊。 只是想问你怎么定义前三名。
        14
    shiji   2018-04-25 09:35:48 +08:00
    @singleion
    也就是假设
    A 总共 100 分
    B 总共 100 分
    C 总共 99 分
    D 总共 99 分
    E 总共 98 分
    那么你期望的输出是什么?
        15
    singleion   2018-04-25 14:13:49 +08:00
    就是年龄 20 以内,总分排名前三的学生"姓名"查出来即可!
        16
    singleion   2018-04-25 14:14:17 +08:00
    @shiji 就是年龄 20 以内,总分排名前三的学生"姓名"查出来即可!
        17
    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
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1053 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 18:51 · PVG 02:51 · LAX 10:51 · JFK 13:51
    ♥ Do have faith in what you're doing.