现在我有1张表
字段如下
ID QUEUE_PRIORITY
1 100
2 200
3 10000
4 500
QUEUE_PRIORITY 表示 被取到的概率值
我想 通过概率 取2个值出来 意思就是 取到 2的概率 是 200/(100+200+10000+500)
怎么排序法 求大大指教
你的意思是根据概率进行排序么
那么你给出的数据根据概率进行排序 升序是
1 100
2 200
4 500
3 10000
毫无疑问只要排序QUEUE_PRIORITY的值即可
如果你还想取得指定的概率的值的话 在排序的时候需要QUEUE_PRIORITY/总和 然后保存到map中 键是id 值是QUEUE_PRIORITY sql语句我不太会写 java代码这样子可以 更高效的方法还没想出来
1,新建一个新表test_b
test_b{
id integer 主键,
table_a_id integer 你的第一张TABLE的主键
}
2,向test_b中插入数据,结果为
id table_a_id
1 1
2 1
3 1
4 1
……
100 1 (注,第一张表中id=1的QUEUE_PRIORITY为100,这里插入100条数据)
101 2
102 2
103 2
……
300 2 (注,第一张表中id=2的QUEUE_PRIORITY为200,这里插入200条数据)
。。。。。(注,第一张表中id=3的QUEUE_PRIORITY为10000,这里插入10000条数据)
。。。。。(注,第一张表中id=4的QUEUE_PRIORITY为500,这里插入500条数据)
3,第一张表中所有QUEUE_PRIORITY求和为10800,再使用
select cast(DBMS_RANDOM.VALUE(0, 10800) as int) from dual;
你会得到一个随机数字 int_random,
select * from 你的第一张表 as ta
where exists (select 1 from test_b where id= int_random
and table_a_id = ta.id)
这就是你的结果了。