将聚合求和函数与 postgres 中的数字进行比较

comprare aggregate sum function to number in postgres

我的下一个查询不起作用:

UPDATE item

SET popularity= (CASE
                    WHEN (select SUM(io.quantity) from item i NATURAL JOIN itemorder io GROUP BY io.item_id) > 3 THEN TRUE
                    ELSE FALSE
                    END);

这里我想将每行内SELECT SUM值与3进行比较并更新流行度。但是 SQL 给出错误:

ERROR:  more than one row returned by a subquery used as an expression

我知道内部 SELECT returns 有很多值,但是 smb 可以帮助我如何比较每一行。换句话说 make loop.

使用子查询时,您需要返回一行,因此实际上是在查询 table.

项中的每条记录
UPDATE item i
SET popularity = (SELECT SUM(io.quantity) FROM itemorder io 
                  WHERE io.item_id = i.item_id) > 3;

另一种方法(postgresql 扩展)是在 FROM 子句中使用派生的 table。

UPDATE item i2
SET popularity = x.orders > 3
FROM (select i.item_id, SUM(io.quantity) as orders
from item i NATURAL JOIN itemorder io GROUP BY io.item_id) 
     as x(item_id,orders)
WHERE i2.item_id = x.item_id

在这里,您正在像以前一样执行单个组子句,我们将加入 table 以根据组的结果进行更新。