首先,本题的思路较上一题的思路就是多一个case...when...函数;
本题同样需要采用两层子查询,第一层运用case...when...函数建立一个各用户累计积分的表t;
接着,在表t的基础上,将各用户的累计积分按降序排列,得到表t1;
最后,将user表同表1按id进行表连接,对连接之后的表筛选出id,name,累计积分字段,再按id升序排列。 代码如下:
select u.id,u.name,t1.ts from user u join
(select t.ui tu,t.s ts,rank()over(order by t.s desc) rk from
(select user_id ui,sum(case when type = 'add' then 1*(grade_num)
when type = 'reduce' then -1*(grade_num) end) s
from grade_info g
group by ui) t) t1
on u.id = t1.tu
where t1.rk = 1
order by u.id

京公网安备 11010502036488号