【SQL】按序二分奖金池

8 次阅读 预计阅读时间: 1 分钟


n

问题

nnnn

在活动大促中,有玩游戏瓜分奖金环节。现有奖金池为10000元,代表奖金池中的初始额度。

nnnn

表中的数据代表每一个用户和其对应的得分,user_id和score都不会有重复值。瓜分奖金的规则如下:按照score从高到低依次瓜分,每个人都能分走当前奖金池里面剩余奖金的一半,当奖金池里面剩余的奖金少于250时(不含),则停止瓜分奖金。

nnnn

现在需要查询出所有分到奖金的user_id和其对应的奖金。

nnnn
user_id  scorenn100       60n101       45n102       40n103       35n104       30n105       25n106       15n107       10n108       5
nnnn

解答

nnnn

求2的三次方(3次幂):select power(2, 3);

nnnn
selectnuser_idn,scoren,power(0.5,rn)*10000 as prizenfromn(  selectn    user_idn    ,scoren    ,row_number() over(order by score desc) as rnn    from temp n) tt nwhere power(0.5,rn)*10000 >=250
n
最后更新于 2024-03-29