2015-09-01 79 views
0

我有一個表中像下面postgres的一個給定的值的記錄,挑選基於在postgres的

alg_campaignid | alg_score | cp | sum  
----------------+-----------+---------+---------- 
      9829 | 30.44056 | 12.4000 | 12.4000 
      9880 | 29.59280 | 12.0600 | 24.4600 
      9882 | 29.59280 | 12.0600 | 36.5200 
      9827 | 29.27504 | 11.9300 | 48.4500 
      9821 | 29.14840 | 11.8800 | 60.3300 
      9881 | 29.14840 | 11.8800 | 72.2100 
      9883 | 29.14840 | 11.8800 | 84.0900 
      10026 | 28.79280 | 11.7300 | 95.8200 
      10680 | 10.31504 | 4.1800 | 100.0000 

從中我必須從0選擇基於隨機產生的數的記錄於100.ie第一記錄如果隨機選取的數字介於0和12.4000之間,則返回;如果rendom介於12.4000和24.4600之間,則返回秒;如果隨機數介於95.8200和100.0000之間,則返回同樣值。

對於實施例 如果拾取隨機數爲8則應當返回的第一個記錄 或 如果拾取隨機數是48,則第四個記錄應返回

是否有可能如果做到這一點postgres的所以好心推薦這個解決方案..

回答

0

是的,你可以在Postgres中做到這一點。如果你想生成數據庫中的數字:

with r as (
     select random() * 100 as r 
    ) 
select t.* 
from table t cross join r 
where t.sum <= r.r 
order by t.sum desc 
limit 1; 
+0

這一個總是返回我的第一行,如果我刪除限制1它將返回所有記錄,直到隨機值 –