使用COUNT(*)的列的SQL设置值

时间:2018-12-13 16:47:14

标签: sql postgresql

我想在SQL表中将列设置为特定值1/COUNT(*)。我想知道如何做到这一点。

为清楚起见,请考虑以下示例。我们有一张桌子table1

TABLE1:
    A  |  B  |  C  
---------------------
    1  |  9  |  0
    2  |  7  |  0
    4  |  8  |  0
    3  |  6  |  0

我想将值C设置为1/COUNT(*)的列0.25。所以结果应该是:

TABLE1:
    A  |  B  |  C  
---------------------
    1  |  9  |  0.25
    2  |  7  |  0.25
    4  |  8  |  0.25
    3  |  6  |  0.25

但是,我尝试了以下代码:

UPDATE TABLE
SET C = 1/COUNT(*)

它不起作用,并给我一个错误:

Error: ERROR: aggregate functions are not allowed in UPDATE
Position: 21 

我应该如何在SQL中执行此操作? 谢谢!

2 个答案:

答案 0 :(得分:4)

如果要使用update,请使用from子句:

UPDATE TABLE
    SET C = 1.0 / c.cnt
    FROM (SELECT COUNT(*) as cnt FROM yourtable ) c;

没有理由要有单独的列。您可以随时轻松地计算出这一点:

select t.*,
       1.0 / count(*) over ()
from t;

答案 1 :(得分:1)

答案:

UPDATE TABLE SET C = 1.0 / (SELECT COUNT(*) FROM TABLE)