我正在尝试从表中选择一个随机行,但是该表中有一个名为 的列Rate
,我希望它返回具有较高速率的行,并且很少返回具有较低速率的行,是这样吗可能的?
桌子 :
CREATE TABLE _Random (Code varchar(128), Rate tinyint)
我正在尝试从表中选择一个随机行,但是该表中有一个名为 的列Rate
,我希望它返回具有较高速率的行,并且很少返回具有较低速率的行,是这样吗可能的?
桌子 :
CREATE TABLE _Random (Code varchar(128), Rate tinyint)
所以你想要一个随机的行,但偏向那些具有更高速率的行?
知道表中有多少行也很好 - 对整个批次进行排序有点贵。您可能更喜欢使用 row_number 概念而不是按 N 个 guid 排序。
所以...一种选择可能是生成一个数字,然后除以 100。想象一下,我们生成一个介于 0 和 1 之间的数字。
.25 给我们 400,.5 给我们 200,.75 给我们 133...注意这里有一条曲线 - 所以更接近 100 的数字出现的频率更高(减去 100 使范围从 1 开始)。
您可以使用RAND()
0 到 1 之间的单个值(这可能已经足够好了),然后进行除法和减法以获得一个数字。如果这高于记录数,那么也许会重复?但请尝试为您的部门选择一个适合的值。
如果您需要增加它的权重,您可以将您的 RAND() 值提高一些数字,以使其变平或变陡。做一些实验看看它的外观。
此查询将获取一个具有高于平均速率的随机记录
SELECT TOP (1) * FROM _Random
WHERE Rate>(SELECT AVG(Rate) FROM _Random)
ORDER BY NEWID()