我正在尝试根据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” ...
答案 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;