Select 行具有较高的价值,很少有较低的价值

Select row with mostly higher value and rarely lower value

我正在尝试 select 来自 table 的随机行,但此 table 中有一列名为 Rate,我希望它 return 具有较高比率的行,很少 return 具有较低比率的行,这可能吗?

Table :

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

此查询将获取一条随机记录,该记录的比率高于平均水平

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

所以您想要一个随机行,但偏向于具有较高比率的行?

最好知道 table 中有多少行 - 对整个批次进行排序有点昂贵。您可能更喜欢使用 row_number 概念而不是按 N 个 guid 排序。

所以...一种选择是生成一个数字,然后用 100 除以它。假设我们生成一个介于 0 和 1 之间的数字。

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

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

如果您需要增加它的权重,您可以将 RAND() 值提高一些,使其变平或变陡。做一些实验看看它的外观。