将聚合求和函数与 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 以根据组的结果进行更新。
我的下一个查询不起作用:
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 以根据组的结果进行更新。