尝试使用CTE计算来更新列

时间:2019-06-26 09:19:53

标签: postgresql

我正在尝试根据column1和column2之间发生的计算来更新column3。理论相对简单,但是我似乎在与CTE斗争。如果column1不为null,则column1 * AVG(column2)将放入column3。

我搜索了论坛并尝试了几种不同的方法,包括CTE和标准UPDATE查询。我似乎在犯错。

WITH cte_avg1 AS (
    SELECT "column1" * AVG("column2") AS avg
    FROM table1
    )
    UPDATE table1
    SET "column3" = cte_avg1.avg
    FROM cte_avg1
    WHERE "column1" IS NOT NULL;

我收到的错误消息如下;

  

错误:列必须出现在GROUP BY子句中或在聚合函数中使用   第5行:SELECT“ column1” * AVG(“ column2” ...

1 个答案:

答案 0 :(得分:1)

在聚合查询中,SELECT之后的所有列必须在GROUP BY子句中或聚合函数的参数中。将乘法移出CTE。

WITH cte_avg1
AS
(
SELECT avg(column2) avg
       FROM table1
)
UPDATE table1
       SET column3 = column1 * cte_avg1.avg
       FROM cte_avg1
       WHERE column1 IS NOT NULL;