使用计算值更新列

时间:2014-09-24 10:34:28

标签: mysql sql

以下是我使用的表格:

+-------------+----------+---------------------+
| sourceindex | source   | pa                  |
+-------------+----------+---------------------+
|           0 | this     | 0.13842974556609988 |
|           1 | is       | 0.26446279883384705 |
|           2 | a        | 0.26446279883384705 |
|           3 | book     | 0.13842974556609988 |
|           4 | ,        | 0.26446279883384705 |
|           5 | that     | 0.13842974556609988 |

我想添加一个结果为log(sum(pa))/pa的列。

关于我如何做到这一点的任何建议?

1 个答案:

答案 0 :(得分:1)

您可以使用交叉联接来计算log(sum(pa)),在您的外部,您可以将结果与pa列的每个值进行划分

update
test t
join (select
`sourceindex`, `source`, `pa` , log_sum/pa new_col
from
test 
cross join (select log(sum(pa)) log_sum
from test ) a
) t1
on (t.sourceindex= t1.sourceindex
   and t.source = t1.source
    and t.pa = t1.pa
   )
set t.new_col = t1.new_col

Demo

但是,如果您切换逻辑以使用选择查询显示计算

,则会更好
select `sourceindex`, `source`, `pa` , log_sum/pa new_col
from
test 
cross join (select log(sum(pa)) log_sum
from test ) t

Demo