每个项目选择X个随机用户

Gid*_*dil 4 sql sql-server random sql-server-2008

我有2张桌子:Items&Users.

Items包含ItemID, and Num_Users
Users包含UserID

对于每个ItemID,我需要根据Num_Users列中指定的值随机选择多个用户.

我在SQL Fiddle上创建了一组示例数据.

Mar*_*ith 5

单程.SQL小提琴

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

您也可以使用CRYPT_GEN_RANDOM(4)而不是Newid()更大程度的随机性,但在非最新版本的SQL Server 2008上存在一些问题.

  • @Gidil - [GUID被设计为独特的,而不是随机的](http://blogs.msdn.com/b/oldnewthing/archive/2012/05/23/10309199.aspx)所以在那里使用具体的随机性可能是优选的.取决于您的需求.上次我测试时,`NEWID`似乎比`CRYPT_GEN_RANDOM`有更好的性能. (2认同)