有二列数据,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条数据中 抽出一条记录,该记录需要大概满足按各个奖项比例抽中;按 总量除以占有 的比例把这些奖品发完(所有发行量总和除以每个奖品发行量),即每个奖品都是随机出现,但出现时能保证每隔多少次会大概出这个奖品,不能前期发行量小的前期都发完了,而是所有奖品都能大概平均出现,不能集中
最后的结果是需要一个奖品发送的顺序么?
在6个记录中抽出一条记录
设置一个奖池,奖池里面的奖品的数量按照你的发行量插入,然后随机抽取一个作为奖项,抽过的删除掉该条记录。
这个可以保证全部随机,如果要控制中奖顺序,需要具体的规则来自定义抽奖。
根据use/all算出一个权重值。如果小于这个权重值。就从当前这里取出一个奖品,同时更新权重值
我觉得二楼可以,select cast( ceiling(rand()*(100+50+30+100+200+10)) as int )算出随机数
然后根据随机数的范围,去确定奖品,比如随机数是0到100,那么是奖品1,随机数是101到150,那么是奖品2