如何使用CTE进行列乘法

时间:2019-06-22 14:35:24

标签: postgresql

我正在尝试将column1乘以column2;根据column2中是否有值。如果column2中有一个值,则答案将放在column3中。我正在尝试使用WITH和Common Table Expression。

我搜索了各个论坛,似乎没有与此类似的CTE问题。

WITH cte_apfc AS(
    SELECT SUM(CAST("column1" AS numeric(4,2))) * SUM(CAST("column2" AS numeric(4,2)))
    FROM table1
    )

    UPDATE table1
    SET "column3" = cte_apfc
    FROM cte_apfc
    WHERE "column2" IS NOT NULL;

这是我当前收到的错误,我不确定如何解决。

错误:列“ column3”的类型为数字,但表达式的类型为record 第13行:SET“ column3” = cte_apfc                                               ^ 提示:您将需要重写或强制转换该表达式。

2 个答案:

答案 0 :(得分:0)

您无法引用CTE的别名,您需要引用该列。为此,您需要定义列别名:

WITH cte_apfc AS(
  SELECT SUM(CAST("column1" AS numeric(4,2))) * SUM(CAST("column2" AS numeric(4,2))) as value
  FROM table1
)
UPDATE table1
   SET "column3" = c.value
FROM cte_apfc c
WHERE "column2" IS NOT NULL;

您可能还希望在查询中使用WHERE "column2" IS NOT NULL将值相乘。


请注意,您实际上并不需要CTE:

UPDATE table1
   SET "column3" = (SELECT SUM(CAST("column1" AS numeric(4,2))) * SUM(CAST("column2" AS numeric(4,2)))
                    FROM table1)
WHERE "column2" IS NOT NULL;

答案 1 :(得分:0)

哇,我太复杂了。我不需要使用CAST,因为列已经是数字了(谢谢horse_with_no_name)。

解决方案不只是简单的...

UPDATE table1
SET "column3" = "column1" * "column2"
WHERE "column2" IS NOT NULL;