【问题标题】:Select X random users per item每个项目选择 X 个随机用户
【发布时间】:2012-10-04 16:47:33
【问题描述】:

我有 2 张桌子:ItemsUsers

Items 包含 ItemID, and Num_Users
Users 包含 UserID

对于每个ItemID,我需要根据Num_Users列中的值随机选择一些Users。

我在SQL Fiddle 上创建了一组样本数据。

【问题讨论】:

  • What have you tried?你搜索了什么?
  • 为了清楚起见——我已经回答了,但我想我可能误解了这个问题——您是否希望返回一个 基于 Num_Users 的随机值,或者 根据返回的 Num_Users 随机用户数
  • 两者都不是。我正在寻找一组随机用户,其大小由返回的 Num_Users 决定?

标签: sql sql-server sql-server-2008 random


【解决方案1】:

一种方式。 SQL Fiddle

SELECT Items.[ItemID],
       UserID
FROM   Items
       OUTER APPLY (SELECT TOP ([Num_Users]) *
                    FROM   Users
                    ORDER  BY Newid()) A 

您也可以使用CRYPT_GEN_RANDOM(4) 代替Newid() 以获得更大程度的随机性,但在非最新版本的SQL Server 2008 上存在some issues with this

【讨论】:

  • 为什么 NewID 不够随机?它有非随机方面吗?
  • @Gidil - GUIDs are designed to be unique, not random 所以使用专门用于随机性的东西可能会更好。取决于你的需要。 NEWID 似乎比我上次测试时的 CRYPT_GEN_RANDOM 性能更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 2017-11-10
  • 2016-10-31
  • 1970-01-01
  • 2011-02-28
相关资源
最近更新 更多