我在PostgreSQL中搜索过等效的AGGREGATION函数sum()
,但没找到。
我需要从另一个数据中减去一个字段的数据。
代码如下:
'''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中,管理产品,(销售,库存,购买等),当我批准采购订单时,我需要从名为{{1的字段中减去购买的产品数量在另一个模块中,所以,我知道如何在OpenErp中关联它们,问题是我不知道如何从这个Cantidad
中减去数量。
据我所知,将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
中减去其中包含的产品(通过将它们分组为此示例)并使用其他模块中的字段{{1而不是purchase_id
。
我希望我已经解释过了。
答案 0 :(得分:3)
我想您可能没有意识到sum
对表达式进行操作,而不仅仅是列引用:
SELECT sum(a - b) FROM the_table;
您还可以使用sum
的输出进行进一步计算:
SELECT a - sum(b) FROM the_table;
基本代数转换表明b - a
相当于(-a) + b
。
如果这不是你想要的,那么根据评论,我认为你可能需要改写你想要的东西,因为这是我唯一可以猜到的你可能遇到问题。