Sql -- 练习4 某列部分数据排序(其他默认)

本文介绍如何使用SQL查询来实现课程成绩及总成绩的排名,并确保特定排名的学生记录按升序排列,同时保持其他数据的默认排序。通过使用DENSE_RANK()和ROW_NUMBER()窗口函数,实现了灵活的数据展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相关表信息

问题1

查询所有课程总成绩前三名的按照升序排在最开头,其余数据排序保持默认,显示(学号、成绩、总成绩)

解决1

select a.rn,a.student_no,
       a.core,
       a.total_core,
       dense_rank() OVER(ORDER BY a.total_core DESC nulls last) ranks
  from (select rownum rn,
               s.student_no,
               core,
               sum(core) over(Partition by s.student_no) total_core
          from HAND_STUDENT s, HAND_STUDENT_CORE sc
         where s.student_no = sc.student_no(+)) a
 ORDER BY CASE
            WHEN ranks <= 3 THEN
             -ranks
            ELSE
             null
          END,a.rn;

结果1

这里写图片描述

问题2

查询所有课程成绩前三名的按照升序排在最开头,其余数据排序保持默认,显示(学号、成绩)

解决2

SELECT hs.student_no,
        hs.core
   FROM (SELECT rownum rn,
                hsc.student_no,
                hsc.core,
                row_number() OVER(ORDER BY hsc.core DESC) ranks
           FROM hand_student_core hsc) hs
  ORDER BY CASE WHEN ranks <= 3 THEN -ranks ELSE null END,rn;

结果2

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值