SQL实战91.获得积分最多的人(三)

题目

在这里插入图片描述

解答

with tmp as (
            select a.user_id, a.cnt as add_num ,if(b.cnt is null,0,b.cnt) as reduce_num
            from (select user_id,sum(grade_num) as cnt
                  from grade_info
                  where type = "add"
                  group by user_id ) a
            left join (select user_id,sum(grade_num) as cnt
                       from grade_info
                       where type = "reduce"
                       group by user_id ) b
            on a.user_id = b.user_id )

select c.user_id as id,u.name,c.grade_num
from (select t.user_id,t.grade_num,rank() over (order by t.grade_num desc) as ranking
      from (select user_id,(add_num-reduce_num) as grade_num
            from tmp ) t ) c
left join user as u
on c.user_id = u.id
where c.ranking = 1
order by c.user_id;
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值