0

sum()在 PostgreSQL 中搜索了与 AGGREGATION 函数等效的函数,但没有找到。

我需要从另一个字段的数据中减去一个字段的数据。

代码如下:

'''SELECT
            p.purchase_id,sum(m.Cantidad), m.state
        FROM
            stock_move m
        LEFT JOIN
            stock_picking p on (p.id=m.picking_id)
        WHERE
            p.purchase_id IN %s GROUP BY m.state, p.purchase_id'''

在这种情况下,purchase_id求和Cantidad它的数据,并存储在其中,stock_picking但是我需要实际减去而不是求和,据我所知,PostgreSQL 中没有减法函数,那么我应该使用哪个函数来完成此任务?

编辑:

我在 OpenErp 中有 2 个模块,用于管理产品(销售、库存、采购等),当我批准采购订单时,我需要从Cantidad另一个模块中调用的字段中减去采购的产品数量,所以,我知道如何在 OpenErp 中关联它们,问题是我不知道如何从中减去数量Cantidad

据我所知,将从中接收到的产品相加的purchase order函数product_qty如下stock

def desc_cert(self, cr, uid, ids, context=None):
    if not ids: return {}
    res = {}
    for id in ids:
        res[id] = [0.0,0.0]
    cr.execute('''SELECT
            p.purchase_id,sum(m.product_qty), m.state
        FROM
            stock_move m
        LEFT JOIN
            stock_picking p on (p.id=m.picking_id)
        WHERE
            p.purchase_id IN %s GROUP BY m.state, p.purchase_id''',(tuple(ids),))
    for oid,nbr,state in cr.fetchall():
        if state=='cancel':
            continue
        if state=='done':
            res[oid][0] += nbr or 0.0
            res[oid][1] += nbr or 0.0
        else:
            res[oid][1] += nbr or 0.0
    for r in res:
        if not res[r][1]:
            res[r] = 0.0
        else:
            res[r] = 100.0 * res[r][0] / res[r][1]
    return res

Cantidad所以,我认为我需要一个更小更简单的函数来从我的领域中获得这种减法。在我的情况下,我不需要任何库存或拣货参数,只需从其中purchase_id包含的产品中减去(通过像本例那样对它们进行分组)并使用另一个模块中的字段Cantidad而不是product_qty.

我希望我已经解释了自己。

4

1 回答 1

4

我想您可能没有意识到sum它对表达式进行操作,而不仅仅是列引用:

SELECT sum(a - b) FROM the_table;

您还可以使用 的输出sum进行进一步计算:

SELECT a - sum(b) FROM the_table;

基本代数变换表明b - a等价于(-a) + b

如果这不是您要查找的内容,那么根据评论,我认为您可能需要重新表述您想要的内容,因为这是我猜您可能遇到的唯一问题。

于 2013-06-03T02:01:29.827 回答