Stored-Procedures

根據列值返回行數

  • December 30, 2016

我們正在為客戶管理抽獎活動,其中我們有一個與參賽者相關的 GUID 以及參賽者獲得的參賽作品數量。我希望能夠根據與參賽作品數量相對應的獲勝機會來抽獎。

GUID | Entries
--------------
1    | 1
2    | 5
3    | 2
4    | 7

所以結果將是:

GUID
----
1
2
2
2
2
2
3
3
4
4
4
4
4
4
4

基本上我計劃將結果放在電子表格中,然後使用隨機數生成器在 1 和 n 之間選擇一個行號,其中 n 是條目總數。但當然,如果有一種方法可以輕鬆地以程式方式選擇獲勝者,我會全神貫注(或視情況而定)。

提前致謝。

出於興趣,這裡是 SQL Server 2016 的解決方案,它使用內置的

$$ pseudo $$隨機數生成器為您挑選獲勝者。 一、數據:

CREATE TABLE #t
(ID int,
Entries int)

INSERT #t
VALUES
(1,1),
(2,5),
(3,2),
(4,7)

然後程式碼:

DECLARE @r float = RAND()

SELECT TOP 1 ID, @r
FROM (
   SELECT ID,
   Entries,
   SUM(Entries) OVER(ORDER BY ID) / CONVERT(float,SUM(Entries) OVER()) AS RunningFraction
   FROM #t
) RF
WHERE RunningFraction > @r
ORDER BY ID

您可以跳過變數聲明而只使用WHERE RunningFraction > RAND(),但這種格式更容易測試功能。

引用自:https://dba.stackexchange.com/questions/159462