南昌营销网站开发,免费域名的网站有哪些,山东建设银行官方网站,成都 做网站 模版目录 问题#xff1a;SQL解答#xff1a; 问题#xff1a;
在活动大促中#xff0c;有玩游戏瓜分奖金环节。现有奖金池为10000元#xff0c;代表奖金池中的初始额度。用户的分数信息如下#xff1a; user_id score
100 60
101 45
102 40
103 3… 目录 问题SQL解答 问题
在活动大促中有玩游戏瓜分奖金环节。现有奖金池为10000元代表奖金池中的初始额度。用户的分数信息如下 user_id score
100 60
101 45
102 40
103 35
104 30
105 25
106 15
107 10
108 5表中的数据代表每一个用户和其对应的得分user_id和score都不会有重复值。瓜分奖金的规则如下按照score从高到低依次瓜分每个人都能分走当前奖金池里面剩余奖金的一半当奖金池里面剩余的奖金少于250时不含则停止瓜分奖金。
现在需要查询出所有分到奖金的user_id和其对应的奖金。
SQL解答
这是拼多多的一个面试题需要先进行一点数学层面的分析把整个瓜分逻辑捋清楚之后不难。这里给出一种思考逻辑假设奖金池的初始总奖金为n那么第一名分到的奖金为n/2第二名分到奖金n/4第三名分到的奖金为n/8依次类推第x名分到的奖金为n/2^x然后计算即可。
select
user_id
,score
,power(0.5,rn)*10000 as prize
from
( selectuser_id,score,row_number() over(order by score desc) as rnfrom temp
) tt
where power(0.5,rn)*10000 250