postgres alter table并插入行概率

时间:2015-09-01 11:41:52

标签: sql database postgresql calculated-columns

我想将具有相同id1的行的权重相加,然后计算列概率中该行的每一行的比率(有点像概率)。

表格数据:

id1 weight  id2 
1   0.1    3   
1   0.2    4   
1   0.3    5   
1   0.8    6   
2   0.5     7    
2   0.6     8    
2   0.7     9    

输出应为:

id1 weight  id2 prob 
1   0.1    3    0.07
1   0.2    4   0.1429
1   0.3    5   0.214
1   0.8    6   0.5714
2   0.5     7    0.2778 
2   0.6     8    0.3333
2   0.7     9    0.3388

4 个答案:

答案 0 :(得分:1)

这可以通过窗口函数轻松解决,该窗口函数通常比具有子查询或派生表的任何解决方案更快:

select id1, 
       weight, 
       id2, 
       weight / sum(weight) over (partition by id1) as prob
from items
order by id1, id2;

SQLFiddle示例:http://sqlfiddle.com/#!15/64453/1

答案 1 :(得分:0)

试试这个

SELECT t.*,t.wieght/t1.Weight AS Prob FROM TABLE_NAME t INNER JOIN 
(
SELECT id1,SUM(weight) AS Weight FROM TABLE_NAME GROUP BY id1
)t1 ON t.id = t1.id

答案 2 :(得分:0)

使用相关子选择对id的所有权重求和:

  boolean fail = false ;
  List<String> actNotInValid = new ArrayList<>();
  for(String act: actual) {
    if(!validSet.contains(act)) {
      fail = true ;
      actNotInValid.add(act);
    }
  }

  assertFalse(actNotInValid.toString(), fail);

答案 3 :(得分:0)

尝试;

select 
    t.id1, t.weight, t.id2, (t.weight/t1.tot) prob
from tbl t
join (
    select id1, sum(weight) tot
    from tbl
    group by id1
) t1
on t.id1 = t1.id1