(SQL)抽獎,亂數(隨機)抽出10筆中獎資料並排名

剛好網路上有網友詢問到抽獎的問題,小喵將小喵的方式記錄在此
我需要從資料庫中亂數的撈出10筆購買資料,並且給予1~10的編號依序獲得獎項

剛好網路上有網友詢問到抽獎的問題,小喵將小喵的方式記錄在此

需求是這樣的,有個資料表記錄著消費者購買的資料,要從這些資料中,抽出幸運的10個,分別依序是頭獎1、二獎2、三獎3、四獎4總共10個人,因此我需要從資料庫中亂數的撈出10筆購買資料,並且給予1~10的編號依序獲得獎項

其實這樣的需求只需透過SQL的語法讀區資料即可,假設我存放購買資料的Table名稱是TCustBuy那麼我所需要下的SQL與法如下:

INTO #TTT
FROM TCustBuy
ORDER BY NewId()

SELECT *
FROM #TTT
說明:
  • NewId():是會產生類似GUID不會重複的並且每次產生都不同的資料,因此Order By NewId()就能夠產生亂數排序的功能
  • TOP 10:的話就是取出其中的前10筆資料,由於資料已經亂數排序了,所以這樣就能夠每次執行都取出不同的10筆資料
  • IDENTITY(int,1,1):是產生不重複並依序的數字,但是他必須配合SELECT....INTO的方式使用,因此配合這個特性使用暫存Table的方式就能夠編出1~10的編號

 

 

 

 

 

最後使用完Temp Table要記得把Temp Table Drop掉

DROP Table #TT
執行結果如下圖:多執行幾次,每次結果都不同
SQLAward10 
 

 

 

 

 


以下是簽名:


Microsoft MVP
Visual Studio and Development Technologies
(2005~2019/6) 
topcat
Blog:http://www.dotblogs.com.tw/topcat