我有一个包含三个字段的表:ID、值、计数
ID 和 Value 组成了 PK。
给定一个 ID,我想选择一个由 Count 加权的值,然后将计数减一。
所以如果我有
1 A 2
1 B 3
我应该有 2/5 的机会得到 A,3/5 的机会得到 B。
如果选择 A,则表格应如下所示
1 A 1
1 B 3
下次 A 将有 1/4 的机会被选中,而 B 将有 3/4
想法?
谢谢!
更新:
重量就像放入袋子中的具有该值(value)的筹码数量。然后随机选择一个。
最佳答案
CREATE TABLE #Vals
(
ID INT,
Value CHAR(1),
[Count] INT,
PRIMARY KEY(ID,Value)
)
INSERT INTO #Vals
SELECT 1,'A',2 UNION ALL
SELECT 1,'B',3
;WITH Nums AS
(
SELECT number
FROM master..spt_values
WHERE number>0 AND type='P'
), Row AS
(
SELECT TOP 1 v.*
FROM #Vals v
JOIN Nums n ON n.number <= v.[Count]
WHERE v.ID=1
ORDER BY CHECKSUM(NEWID())
)
UPDATE Row
SET [Count] = [Count] -1
OUTPUT inserted.*
DROP TABLE #Vals
关于sql查询选择一个随机值(加权),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5811018/