关联子查询之分组排序与排序

23按各科成绩进行排序,并显示排名, Score 重复时保留名次空缺

--Score重复时保留名次空缺 ---尽量用此方法,应为row_num() rank dense_ranksqlserver高级用法,其他sql数据库不通用
select t.* , px = (select count(1) from SC where Cid = t.Cid and score > t.score) + 1 from sc t order by t.cid , px

 

25查询学生的总成绩,并进行排名,总分重复时保留名次空缺


SELECT  b.* ,
        ( SELECT    COUNT(1)
          FROM      ( SELECT    t.SId ,
                                SUM(t.score) 总成绩
                      FROM      SC t
                      GROUP BY  t.SId
                    ) a
          WHERE     a.总成绩 > b.总成绩  ---注意此处学生总成绩排序与 上面每门课程排序不同之处是 每门课程是有3门,而学生id 只有1类,所以才有 where a.cid =b.cid and a.score >b.score  与下面 直接where a.score>b.score 区别,重点在分组排序和排序
        ) + 1 AS px
FROM    ( SELECT    t.SId ,
                    SUM(t.score) 总成绩
          FROM      SC t
          GROUP BY  t.SId
        ) b
ORDER BY px

其中要点:

1.关联子查询 排序  ,为什么不用 row_num()over() ,rank()  ,dense rank() ,因为这些高级函数sqlserver 独有,其他mysql 不一定支持

2.分组子查询 和 嵌套子查询   

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值