您需要为每行生成一个随机数并对其加权。
在这种情况下,
RAND(CHECKSUM(NEWID()))绕过的“每个查询”评估
RAND。然后只需将其乘以boost,然后将ORDER
BY乘以结果DESC。该
SUM..OVER给你的总升压
DECLARE @sample TABLE (id int, boost int)INSERT @sample VALUES (1, 1), (2, 2), (3, 7)SELECt RAND(CHECKSUM(NEWID())) * boost AS weighted, SUM(boost) OVER () AS boostcount, idFROM @sampleGROUP BY id, boostORDER BY weighted DESC
如果您有不同的提升值(我想您已经提到过),我也将考虑使用LOG(以e为底)来平滑分布。
最后,ORDER BY NEWID()是不考虑提升的随机性。播种RAND很有用,但不能单独播种。
该示例放到了SQL Server 2008 BTW上
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)