首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带偏差的MySQL随机记录

带偏差的MySQL随机记录
EN

Stack Overflow用户
提问于 2011-08-01 10:32:04
回答 1查看 435关注 0票数 1

我想从表中随机选择一条记录,但偏向于某个特定字段中的较高值--我不希望任何记录有0%的机会被选中,只是不太可能被选中。

从这篇文章中,我知道随机选择可能会很慢,您可以加快它们的速度:http://wanderr.com/jay/order-by-slow/2008/01/30/

但是,如果您正在处理一些带有连接和where语句的表,并且希望使用其中一个字段作为一种偏向随机性的方法(该字段的值越高,则更有可能被选中),该怎么办呢?例如:

代码语言:javascript
运行
复制
SELECT a.id, a.date, a.userid, b.points FROM table_a AS a INNER JOIN table_b AS b ON (a.userid = b.userid) WHERE DATE_SUB(CURDATE(), INTERVAL 60 DAY) <= a.date

我如何才能将上面的查询转换成一个高效但不是真正随机的查询,从而偏向于更高的b.points值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-01 12:46:30

我的2美分,偏向可以这样进行:

假设分数在0,100之间。

您可以随机选择5条记录,即>75,3条记录>50,2条记录>25,1条记录>0

现在如果你从这11条记录中随机再一次,它偏向于更高的分数。

为了将它们放在sql中,我们将连接表命名为"abc“

代码语言:javascript
运行
复制
Select * from (
select * from abc where b.points > 75 order by rand() limit 5
cross join 
select * from abc where b.points > 50 and b.points <75 order by rand() limit 3
cross join 
select * from abc where b.points > 25 and b.points <50 order by rand() limit 2
cross join 
select * from abc where b.points > 0 and b.points <25 order by rand() limit 1
) as result
order by rand() limit 3

在性能方面,我会看看你的链接,然后更新这篇文章。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6893750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档