2015-08-09 36 views
1

我試圖從表中選擇一個隨機行,但此表中有一列名爲Rate,我希望它返回具有較高速率的行,並且很少返回具有更低比率的行,這可能嗎?選擇具有更高值和更低值的行

表:

CREATE TABLE _Random (Code varchar(128), Rate tinyint) 
+0

'select MAX(Rate)Rate,Code from _Random group by Code' – wiretext

回答

3

所以,你要排隨機,而是朝着具有更高速率的那些加權隨機記錄?

這也是很好的知道表中有多少行 - 排序整個很多很貴。您可能更喜歡使用row_number概念,而不是使用N guid進行排序。

所以...一個選項可能是生成一個單一的數字,然後除以100。假設我們生成一個介於0和1之間的數字。

.25給了我們400,.5給了我們200,.75給了我們133 ...注意到這裏有一個曲線 - 所以接近100的數字會出現更多通常(減去100以使範圍從1開始)。

你可以使用RAND() 0和1之間的一個值(它可能不夠好),然後做除法和減法得到的數字。如果這比記錄的數量更高,那麼可能會重複?但是嘗試爲你的部門選擇適合的價值。

如果你需要更多的重量,你可以通過一些數字提高你的RAND()值,以壓平或變陡起來。做一些試驗來看看它的外觀。

+0

謝謝!我使用了row_number和rand(),它們工作得很好。 – Youssef

0

這個查詢將獲取其具有高於平均水平的速度

SELECT TOP (1) * FROM _Random 
WHERE Rate>(SELECT AVG(Rate) FROM _Random) 
ORDER BY NEWID() 
+0

此函數不斷返回最高速率的行。此行中的費率爲2,其他費率爲1. – Youssef

相關問題