牛客网最后一题(91题 )

这篇博客分享了两种不同的SQL查询方法,用于计算用户得分并按排名过滤。第一种利用`CASE`语句进行条件计算,第二种则巧妙运用`IF`函数。虽然两种方法思路相似,但`IF`函数的使用可能不适用于所有SQL方言。博客指出,对于MySQL用户,深入理解其特有的语法特性可以提升查询的优雅性。
摘要由CSDN通过智能技术生成

通关记录一下吧,全部通过,只是个别题写的不够优雅。还是学到了一些东西!
题目点这里
题解:

select
  u.id
  ,u.name
  ,b.sum_grade_num
from
(
select
  user_id
  ,sum(new_grade_num) as sum_grade_num
  ,rank() over ( order by sum(new_grade_num) DESC) as  t_rank
from
(
select
  user_id
  ,grade_num
  ,type
  ,case when type = "add" then grade_num else grade_num*(-1) END AS new_grade_num
from grade_info ) AS a 
group by user_id) AS b inner join user AS u 
ON b.user_id = u.id
where b.t_rank=1
order by u.id

题解二:
这种解法思路上与上解一致,只是巧妙的运用了if 函数,但if函数并非所有SQL的通用用法。如果以后工作确定使用MySQL 可以再深究一些独有的用法,会让语句更优雅;

select t1.id,t1.name,t0.grade as grade_sum
from(
    select user_id,grade,rank()over(order by grade desc) as t
    from(
        select user_id,sum(if(type='add',grade_num,-1*grade_num)) as grade
        from grade_info
        group by user_id
        ) a0
) t0
join user as t1
on t0.user_id = t1.id
where t=1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值