【问题标题】:comprare aggregate sum function to number in postgres将聚合总和函数与 postgres 中的数字进行比较
【发布时间】:2015-05-28 16:52:02
【问题描述】:

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

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 返回许多值,但可以帮助我了解如何比较每一行。换句话说就是循环。

【问题讨论】:

    标签: postgresql sum case


    【解决方案1】:

    使用子查询时,您需要返回单行,因此您实际上是在对 item 表中的每条记录进行查询。

    UPDATE item i
    SET popularity = (SELECT SUM(io.quantity) FROM itemorder io 
                      WHERE io.item_id = i.item_id) > 3;
    

    另一种选择(它是 postgresql 扩展)是在 FROM 子句中使用派生表。

    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
    

    在这里,您正在像以前一样执行单个组子句,并且我们正在加入要使用组结果更新的表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多