2 zzwzxzs444 zzwzxzs444 于 2013.09.23 18:44 提问

oracle 或者 java 通过概率取得对应的值

现在我有1张表

字段如下

ID QUEUE_PRIORITY
1 100
2 200
3 10000
4 500

QUEUE_PRIORITY 表示 被取到的概率值

我想 通过概率 取2个值出来 意思就是 取到 2的概率 是 200/(100+200+10000+500)

怎么排序法 求大大指教

2个回答

sasuke38
sasuke38   2013.09.24 09:36
你的意思是根据概率进行排序么


那么你给出的数据根据概率进行排序   升序是
1 100
2 200
4 500
3 10000

毫无疑问只要排序QUEUE_PRIORITY的值即可

如果你还想取得指定的概率的值的话  在排序的时候需要QUEUE_PRIORITY/总和   然后保存到map中   键是id  值是QUEUE_PRIORITY    sql语句我不太会写   java代码这样子可以   更高效的方法还没想出来
zzwzxzs444
zzwzxzs444 不是根据概率来排序 也不是求概率值 而是 随机取一条记录 但是QUEUE_PRIORITY中值越高的那条记录 被取到的概率越大
接近 5 年之前 回复
asiaasia666
asiaasia666   2013.09.24 12:50

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)

这就是你的结果了。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Java机器学习库ML之七分类预测输出概率值
场景:一般分类预测直接输出类别标记,不过有些情况需要输出对应类别的概率值,比如判定为正例的概率是0.6,而判定为负例的概率是0.3,那自然标记为正例,这里就是看ML用classDistribution输出各类别的概率值。参考代码如下: /** * This file is part of the Java Machine Learning Library * * The Java Mac
通过操作系统上的PID找出相应的SQL语句
linux平台下,我们一般通过TOP命令,查看性能消耗最大的进程,如果看到是oracle进行,那么就需要通过进程号,查询该进程当前执行的SQL语句,网上百度有很多SQL,我一般通过下面的方式进行查找: 通过操作系统上的PID找出相应的SQL语句的SID: SELECT s.sid, p.spid FROM v$session s, v$process p WHERE s.paddr = p
数学(2) 先验概率与后验概率
为研究 LDA 所做的数学储备,虽然之前已经学习过一定的相关知识,但是没有总结过。 先验概率 所谓先验概率,就是根据已有的知识,主观上对一件事情发生的可能性的推测。我以前理解先验概率的是,事件发生的概率是客观的,无法改变的。比如投掷硬币,如果随机抛掷一枚均匀的硬币,那么正反面朝上的概率均为12\frac{1}{2}。但是现在看来,随机抛掷,硬币均匀,这些都是我们已经知道的知识。所以没有什么
利用反射机制获取Enum属性的name或者value
利用反射机制获取Enum属性的name或者value
通过name或者id获取value
Document         点我额   再来一次      function s(){ alert(document.getElementsByName('a')[0].value); alert(document.getElementById('s').value); alert("name选中"+$("#a").val()+" ,"+$("#s").val());
js实现javaMap的功能 根据json的key获取json的key对应的值
//java中的代码 JSONObject json=new JSONObject(); if(brandRootColumn!=null){ Collection brandColumns=brandRootColumn.getChildrenAsc(); Iterator it=brandColumns.iterator();
java根据概率随机中奖 测试类
最近要做一个宝箱抽奖的功能 自己先联系了一下,分别用 list和set 进行存储和抽取,做了一个时间消耗的对比,感觉list应该比set读取的要快些,但是这也不一定,希望大家能够共同讨论。 废话少说上代码: package com.test.testRandom; import java.util.ArrayList; import java.util.HashSet; import jav
Java 关于HashMap根据value反向获取key值
Map中是一个key有且只有一个value. 但是一个value可以对应多个key值. 一般都是通过key,然后map.get(key)获得到value. 如果想要反向通过value获得key的值,提供以下方法: package com.jglz.qing.map; import java.util.ArrayList; import java.util.HashMap; i
ORACLE根据汉字获取拼音码:首字母/全拼/首字母截取
create or replace package  GetHZPY is     --oracle汉字转拼音 PACKAGE     --1.获得全拼  www.2cto.com   --SELECT GETHZPY.GETHZFULLPY('汉字') FROM DUAL;   --结果 : HanZi     --2.拼音首字母   --SELECT GETHZPY.G
HashMap中根据Value值,来获取对应的key值
要新年了,提前祝大家新年快乐,一帆风顺,万事如意,阖家欢乐! 上一篇文章中已经说过:HashMap的参数的拼接 http://blog.csdn.net/willba/article/details/79268387 这篇主要是说 根据特定的Value值,获取对应的key值,如下 //封装假数据 HashMapString,String> map = new HashMap(); map.