我試圖從表中選擇一個隨機行,但此表中有一列名爲Rate
,我希望它返回具有較高速率的行,並且很少返回具有更低比率的行,這可能嗎?選擇具有更高值和更低值的行
表:
CREATE TABLE _Random (Code varchar(128), Rate tinyint)
我試圖從表中選擇一個隨機行,但此表中有一列名爲Rate
,我希望它返回具有較高速率的行,並且很少返回具有更低比率的行,這可能嗎?選擇具有更高值和更低值的行
表:
CREATE TABLE _Random (Code varchar(128), Rate tinyint)
所以,你要排隨機,而是朝着具有更高速率的那些加權隨機記錄?
這也是很好的知道表中有多少行 - 排序整個很多很貴。您可能更喜歡使用row_number概念,而不是使用N guid進行排序。
所以...一個選項可能是生成一個單一的數字,然後除以100。假設我們生成一個介於0和1之間的數字。
.25給了我們400,.5給了我們200,.75給了我們133 ...注意到這裏有一個曲線 - 所以接近100的數字會出現更多通常(減去100以使範圍從1開始)。
你可以使用RAND()
0和1之間的一個值(它可能不夠好),然後做除法和減法得到的數字。如果這比記錄的數量更高,那麼可能會重複?但是嘗試爲你的部門選擇適合的價值。
如果你需要更多的重量,你可以通過一些數字提高你的RAND()值,以壓平或變陡起來。做一些試驗來看看它的外觀。
謝謝!我使用了row_number和rand(),它們工作得很好。 – Youssef
這個查詢將獲取其具有高於平均水平的速度
SELECT TOP (1) * FROM _Random
WHERE Rate>(SELECT AVG(Rate) FROM _Random)
ORDER BY NEWID()
此函數不斷返回最高速率的行。此行中的費率爲2,其他費率爲1. – Youssef
'select MAX(Rate)Rate,Code from _Random group by Code' – wiretext