2015-08-09 34 views
1

我试图从表中选择一个随机行,但此表中有一列名为Rate,我希望它返回具有较高速率的行,并且很少返回具有更低比率的行,这可能吗?选择具有更高值和更低值的行

表:

CREATE TABLE _Random (Code varchar(128), Rate tinyint) 
+0

'select MAX(Rate)Rate,Code from _Random group by Code' – wiretext

回答

3

所以,你要排随机,而是朝着具有更高速率的那些加权随机记录?

这也是很好的知道表中有多少行 - 排序整个很多很贵。您可能更喜欢使用row_number概念,而不是使用N guid进行排序。

所以...一个选项可能是生成一个单一的数字,然后除以100。假设我们生成一个介于0和1之间的数字。

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

你可以使用RAND() 0和1之间的一个值(它可能不够好),然后做除法和减法得到的数字。如果这比记录的数量更高,那么可能会重复?但是尝试为你的部门选择适合的价值。

如果你需要更多的重量,你可以通过一些数字提高你的RAND()值,以压平或变陡起来。做一些试验来看看它的外观。

+0

谢谢!我使用了row_number和rand(),它们工作得很好。 – Youssef

0

这个查询将获取其具有高于平均水平的速度

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

此函数不断返回最高速率的行。此行中的费率为2,其他费率为1. – Youssef

相关问题