选择具有不同概率的随机行 - SQL

时间:2013-03-21 15:28:49

标签: sql sql-server probability

我希望选择具有不同概率列的随机行:

ID     Type
Bike   1
Moto   1
Asus   2
Car    1
Apple  2
John   3

如果我这样做,我会有随机概率:

  

通过newid()

从项目顺序中选择前1 *

我希望John(类型3)获得的概率为70%,类型1为5%,类型2为25%。

2 个答案:

答案 0 :(得分:4)

我会使用RAND()函数而不是NEWID()

使用RAND(),我们可以生成1到100之间的随机数,然后使用CASE语句根据随机生成的数字选择type

根据MSDN:

  

RAND()返回从0到1的伪随机浮点值,   独家

RAND()乘以100的含义将为我们提供0到99之间的数字。添加1会将范围更改为1到100。

如果在选择要返回的type之后,您想要从type中随机选择一条记录,则可以添加SELECT TOP 1 ... ORDER BY NEWID()以获取该类型的随机记录:

DECLARE @Random INT
SET @Random = (RAND() * 100) + 1

SELECT TOP 1 ID, Type
FROM Items
WHERE Type = CASE
  WHEN @Random > 30 THEN 3
  WHEN @Random BETWEEN 6 AND 30 THEN 2
  ELSE 1
END
ORDER BY NEWID()

See it here ...运行几次以查看结果与概率匹配。

答案 1 :(得分:1)

您的意思是整个类型= 1组的概率为5%,或者您希望每个类型= 1的记录有5%的概率被选中? 如果这是第二个选项,那么你有70 + 15 + 50 = 135 =你无法做到这一点。 如果它是第一个选项,那么你必须进行2次绘制 - 首先是一个类型,然后是这种类型的一行。