UPDATE with Aggregate SELECT - 当SELECT为空时SET列为0

时间:2016-05-03 09:47:50

标签: postgresql

我有以下UPDATE语句

UPDATE stuff
SET stuff.total = t.total
FROM (
  SELECT SUM(price) FROM things WHERE stuff_id = ? GROUP BY stuff_id
) t
WHERE stuff.id = ?

things中实际存在行时,这可以正常工作,但是当没有执行UPDATE时(我认为这是有意义的)。在这种情况下,将stuff.total设置为0的优雅方式是什么?我想在一个查询中执行此操作。 我已经尝试了SET stuff.total = coalesce(t.total, 0),但它没有效果。

1 个答案:

答案 0 :(得分:1)

您尚未在正确的位置使用coalesce。此外,GROUP BY可以省略。试试这个问题:

UPDATE stuff
SET stuff.total = t.total
FROM (
  SELECT coalesce(SUM(price), 0) FROM things WHERE stuff_id = ?) t
WHERE stuff.id = ?