选择具有较高值且很少较低值的行

时间:2015-08-09 06:45:44

标签: sql sql-server random newid

我正在尝试从表中选择一个随机行,但是此表中有一个名为var cashLots = data.lots.filter(lot => lot.cash); 的列,我希望它返回具有更高速率的行,并且很少返回行这个可能性较低吗?

表:

Rate

2 个答案:

答案 0 :(得分:3)

所以你想要一个随机行,但是对那些利率较高的行加权?

知道表中有多少行也是一件好事 - 整个批次排序有点贵。您可能更喜欢使用row_number概念,而不是使用N guids进行排序。

所以......一个选项可能是生成一个数字,然后用它除以100。想象一下,我们生成一个介于0和1之间的数字。

.25给我们400,.5给我们200,。75给我们133 ...注意这里有一条曲线 - 所以接近100的数字更频繁出现(减去100以使范围从1开始) )。

您可以将RAND()用于0到1之间的单个值(这可能已经足够了),然后进行除法和减法以获得数字。如果这高于记录数,那么可能重复一次?但是,请尝试为适合您的部门选择一个值。

如果你需要更多的重量,你可以将你的RAND()值提高一些数量,以使其变平或使其变得陡峭。做一些实验,看看它看起来如何。

答案 1 :(得分:0)

此查询将获取具有高于平均费率的随机记录

SELECT TOP (1) * FROM _Random 
WHERE Rate>(SELECT AVG(Rate) FROM _Random)
ORDER BY NEWID()