我想更新下面提到的表格,如
rate = round(score / sum(score) * 100, 2)
+-------+------+
| score | rate |
+-------+------+
| 49 | 0 |
| 27 | 0 |
| 26 | 0 |
| 28 | 0 |
| 7 | 0 |
| 6 | 0 |
| 7 | 0 |
| 13 | 0 |
| 12 | 0 |
| 13 | 0 |
| 13 | 0 |
| 3 | 0 |
| 6 | 0 |
| 13 | 0 |
| 5 | 0 |
| 5 | 0 |
| 10 | 0 |
| 707 | 0 |
+-------+------+
结果应该是这样的
+-------+-------+
| score | rate |
+-------+-------+
| 49 | 5.16 |
| 27 | 2.84 |
| 26 | 2.74 |
| 28 | 2.95 |
| 7 | 0.74 |
| 6 | 0.63 |
| 7 | 0.74 |
| 13 | 1.37 |
| 12 | 1.26 |
| 13 | 1.37 |
| 13 | 1.37 |
| 3 | 0.32 |
| 6 | 0.63 |
| 13 | 1.37 |
| 5 | 0.53 |
| 5 | 0.53 |
| 10 | 1.05 |
| 707 | 74.42 |
+-------+-------+
我尝试使用此代码和其他一些代码,但结果为0
update table1
set rate = round((score / (select sum(score)
from table1) * 100)::numeric, 2);
3条答案
按热度按时间hgtggwj01#
您需要将总和强制转换为数字以强制进行数字除法
h7appiyu2#
试试这个:
如果score是整数,则必须转换为数字、实数或双精度,以便不会得到0作为结果。
sum
必须在此处用作window function,以便计算所有现有行的总和。如果要更新your_table的
rate
列:这里需要
FROM
子句,因为UPDATE不接受SET
子句中的聚合函数和窗口函数。参见dbfiddle
vkc1a9a23#
您也可以将CTE与窗口函数一起使用;
这是fiddle