尝试使用CTE计算更新列

  • 本文关键字:计算 更新 CTE postgresql
  • 更新时间 :
  • 英文 :


我正在尝试根据列1和列之间发生的计算来更新列3。该理论相对简单,但是我似乎正在与CTE的斗争。如果列1不是零,则将Column1 * AVG(列2(放入第3栏中。

我搜索了论坛,并尝试了一些不同的方法,包括CTE和标准更新查询。我似乎是犯了一个错误。

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;

我收到的错误消息如下;

错误:列必须通过子句出现在组中或用于聚合函数 第5行:选择" column1" * avg(" column2" ...

在汇总查询中,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;

最新更新