Sql -- 练习1 查询每科成绩前两名的学生信息

相关表信息

问题

查询每科成绩前两名的学生信息

解决1

 SELECT hs2.student_name sna, hc2.course_name cna, m1.core
      FROM hand_student hs2,
           hand_course hc2,
           (SELECT hsc.student_no sno,
                   hsc.course_no cno,
                   hsc.core,
                   row_number() over(PARTITION BY hsc.course_no ORDER BY hsc.core DESC) rn
              FROM hand_student_core hsc) m1
     WHERE m1.rn <= 2
       AND hs2.student_no = m1.sno
       AND hc2.course_no = m1.cno
     ORDER BY core;

解决2

with temps as(
    select hs.student_name,
           hsc.student_no,
           hc.course_name,
           hsc.course_no,
           hsc.core
      from hand_student_core hsc, hand_student hs, hand_course hc
     where hc.course_no = hsc.course_no
       and hs.student_no = hsc.student_no)
      select *
        from (select t.*,
               row_number() over(partition by t.course_no order by t.core desc) asd
          from temps t)
       where asd <= 2;

结果

这里写图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值