sum嵌套if/iif/case...when计算总积分,需要多次嵌套复用子查询时,可以创建临时表,提高执行效率和代码可读性,代码如下:

with gs AS
    (select
     u.id, u.name, sum(case when gi.type='add' then gi.grade_num else -gi.grade_num end) grade_sum
    from user u , grade_info gi
    where u.id = gi.user_id
    group by 1,2 
    )
select * from gs
where grade_sum = (select max(grade_sum) from gs)
order by id ;