首页 新闻 会员 周边 捐助

求sqlerver sql语句思路

0
悬赏园豆:100 [待解决问题]

有二列数据,all表示累计奖品发行总量,use表示已经使用量
id all use
1 100 0
2 50 0
3 30 0
4 100 0
5 200 0
6 10 0
能不能用sql语句写出,从这6条数据中 抽出一条记录,该记录需要大概满足按各个奖项比例抽中;按 总量除以占有 的比例把这些奖品发完(所有发行量总和除以每个奖品发行量),即每个奖品都是随机出现,但出现时能保证每隔多少次会大概出这个奖品,不能前期发行量小的前期都发完了,而是所有奖品都能大概平均出现,不能集中

碳烤秋刀鱼的主页 碳烤秋刀鱼 | 初学一级 | 园豆:51
提问于:2018-11-10 10:55
< >
分享
所有回答(4)
0

最后的结果是需要一个奖品发送的顺序么?

画笔灬 | 园豆:920 (小虾三级) | 2018-11-10 11:54

在6个记录中抽出一条记录

支持(0) 反对(0) 碳烤秋刀鱼 | 园豆:51 (初学一级) | 2018-11-10 12:03
0

设置一个奖池,奖池里面的奖品的数量按照你的发行量插入,然后随机抽取一个作为奖项,抽过的删除掉该条记录。
这个可以保证全部随机,如果要控制中奖顺序,需要具体的规则来自定义抽奖。

fangq | 园豆:417 (菜鸟二级) | 2018-11-14 17:49
0

根据use/all算出一个权重值。如果小于这个权重值。就从当前这里取出一个奖品,同时更新权重值

Giant150 | 园豆:1172 (小虾三级) | 2018-11-21 15:37
0

我觉得二楼可以,select cast( ceiling(rand()*(100+50+30+100+200+10)) as int )算出随机数
然后根据随机数的范围,去确定奖品,比如随机数是0到100,那么是奖品1,随机数是101到150,那么是奖品2

浅草青晨 | 园豆:904 (小虾三级) | 2018-12-24 11:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册