我有一个有value
字段的表格。记录的值在0到100之间有些均匀分布。
我希望在给定目标均值n
的情况下查询此表中的x
条记录,以便我会收到一个加权随机结果集,其中avg(value)
大约为{{} 1}}。
我可以轻松做点像
x
...但每次运行查询时,这都会给我相同的结果。
我想要做的是添加某种加权,以便可以选择任何记录,但随着与SELECT TOP n * FROM table ORDER BY abs(x - value)
的距离的增加,概率会降低,这样我最终会得到像围绕我的平均值正常分布。
我很感激有关如何实现这一目标的任何建议。
答案 0 :(得分:2)
为什么不使用RAND()函数?
SELECT TOP n * FROM table ORDER BY abs(x - value) + RAND()
修改强>
使用Rand将无法正常工作,因为在选择中对RAND的调用倾向于为大多数行生成相同的数字。 Heximal使用NewID是正确的,但需要按顺序直接使用
SELECT Top N value
FROM table
ORDER BY
abs(X - value) + (cast(cast(Newid() as varbinary) as integer))/10000000000
大除数10000000000用于使avg(value)
更接近X,同时保持AVG(x-value)
低。
据说所有人都说https://stats.stackexchange.com/上的问题(没有SQL位)会得到更好的结果。
答案 1 :(得分:0)
试
SELECT TOP n * FROM table ORDER BY abs(x - value), newid()
或
select * from (
SELECT TOP n * FROM table ORDER BY abs(x - value)
) a order by newid()