NewID()不返回随机样本

时间:2012-11-29 17:36:58

标签: sql sql-server tsql

  

可能重复:
  Random sampling from a large dataset

我之前发布了一个问题here

我认为一切都很好,花花公子,但当我去检查结果的随机性时,我发现没有。查询的其他方面工作正常,但我从表中获取top X数字,无论我尝试做什么。由于SQL Server不允许您在子查询中使用order by子句,我如何解决这个问题以确保我获得真正的随机样本?

1 个答案:

答案 0 :(得分:1)

只要指定ORDER BY子句,就可以在子查询中使用TOP

旧技巧是在子查询中使用SELECT TOP 100 PERCENT ... ORDER BY NEWID()来欺骗优化器实现子查询中间查询。

SQL优化器团队的高层人员已经说过,优化器现在知道将返回所有行而忽略它(虽然它仍然值得一试)

如果失败,请尝试SELECT TOP 2147483647 ... ORDER BY NEWID()完成与TOP 100 PERCENT

相同的操作