mysql - 获得具有幸运率的随机条目

标签 mysql

我正在寻找一种解决方案,以幸运率获取一个或多个条目。我会尽力解释。

我有一个看起来像这样的表:

+-------------------+---------------------+
| Username(varchar) | Subscriber(boolean) |
+-------------------+---------------------+
| Tobi              |                   1 |
| Maik              |                   0 |
| Jelly             |                   0 |
| Arthur            |                   1 |
+-------------------+---------------------+

例如我说幸运率为 3,那么 subscriber 值为 1 的人应该比值为 0 的人被选中高 3 倍。

最佳答案

如果我没理解错的话,你想选择一行,“1”的可能性是“0”的 X 倍。

以下可能与您想要的足够接近:

select t.*
from table t
order by rand() * (case when Subscriber = 0 then 1 else luckrate end) DESC
limit 1;

但是,这个比例并不完全是luckrate。这可能足以满足您的目的。

编辑:

正确的公式应该是:

order by rand() * (case when Subscriber = 0 then 1 else (1 + luckrate)/2.0 end) DESC

因此,对于“3”,系数为 2。此公式适用于 luckrate >= 1。显然不适用于 0。

这是公式背后的逻辑。我发现计算给定比例的“幸运率”更容易。因此,假设比例为 10。这意味着我们正在比较两个均匀随机分布,一个从 0 到 1,另一个从 0 到 10。问题是:第二个“获胜”的频率是多少?这就是“幸运率”。

嗯,当第二个大于 1 时,它总是赢。这种情况发生在 9/10 的时间。其余时间,它有一半的时间获胜(即有 10% 的时间在 0 和 1 之间有两个均匀分布)。因此,总体获胜概率为 90% + 5% = 95%。反过来,这对应于 19 的“幸运率”。

您可以计算出其他胜率。你可以做反向计算得到上面的公式。但是,此逻辑仅在第二个范围大于第一个范围时才有效(根据问题,这没关系)。

编辑:

要处理小于 1 的 luckrate,我认为您可以进行反转并将该因子应用于 0。像这样:

order by rand() * (case when luckrate = 0 then (subscriber <> 0)
                        when luckrate = 1 then 1
                        when luckrate < 1 and subscriber = 1 or
                             luckrate > 1 and subscriber = 0
                        then 1
                        when luckrate < 1 and subscriber = 0
                        then (1 + (1/luckrate)/2.0)
                        when luckrate > 1 and subscriber = 1
                        then (1 + luckrate)/2.0
                   end) DESC

关于mysql - 获得具有幸运率的随机条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27851332/

相关文章:

mysql - 来自 mySQL 的动态选项卡和动态内容

MySQL - 长文搜索

javascript - 为什么 req.body 对我来说总是未定义

mysql - 返回主题标签帖子数 sql, mysql

php - 将单个表的两行与除一个之外的所有重复值连接起来?

php - 如何仅查询之前(月和年)的日期? (拉拉维尔)

Python-将元组转换为字符串

mysql - 如何使用带有双向实体的 RestFul Web 服务正确编写 Json?

php - 在 MySQL 查询中放置一个 PHP 变量

php - 创建网格而不是表格