在SQL Server中,我只想選擇一個字段併爲每行分配一個隨機數。將會有超過1M的行數,然後我將隨機數字順序選擇頂部的50K作爲隨機樣本。在sql中使用rand()函數時遇到問題
如果我這樣做:
Select x, rand()*(50000-1)+1)
From Y
我得到我想要的一切的x的,但他們每個人都有相同的隨機數。
在SQL Server中,我只想選擇一個字段併爲每行分配一個隨機數。將會有超過1M的行數,然後我將隨機數字順序選擇頂部的50K作爲隨機樣本。在sql中使用rand()函數時遇到問題
如果我這樣做:
Select x, rand()*(50000-1)+1)
From Y
我得到我想要的一切的x的,但他們每個人都有相同的隨機數。
如果僅使用隨機數隨機排序,你可以跳過,而不是隨機數場,並使用
ORDER BY NEWID()
你也許並不需要通過指定的任何值,只是爲了一個僞隨機值,並採取TOP
:
SELECT TOP 50000 X FROM Y ORDER BY NEWID()
謝謝。你能簡單解釋一下這是如何工作的? NewID對我來說是新的 – user6114185
@ user6114185:'NEWID()'返回一個GUID,因此每個行都會臨時分配一個新的GUID,所以'ORDER BY'起作用。由於GUID對於所有意圖和目的都是絕對不會重複的,並且它們不是按順序生成的,我們基本上可以相信它對於您來說足夠隨機。 –
記得剛取出括號「+1」之後,如果你不使用地板或其他什麼東西,當你生成你的電話號碼。 – Dresden