我在PostgreSQL中搜索了一個等效的AGGREGATION函數sum()
,但是沒有找到任何。從字段中減去數據 - PostgreSQL
我需要從另一個數據中減去一個字段的數據。
的代碼去如下:
'''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裏沒有減功能遠據我所知,我應該用哪個函數來完成這項任務?
編輯:
我有2個模塊,在OpenERP的,其管理的產品,(銷售,庫存,採購等),當我批准採購訂單,我需要減去,購買的產品數量從另一個模塊中稱爲Cantidad
的字段,所以,我知道如何將它們與OpenErp相關聯,問題是我不知道如何從這個Cantidad
減去數量。
據我所知,該款項,從purchase order
在stock
收到的product_qty
產品的功能如下:
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
)的字段。
我希望我已經解釋了我自己。
當然有一個函數來減去值。請添加您的Postgres版本,並澄清您想要從中減去什麼。 –
謝謝你,Postgres版本是9.2,我想從「Cantidad」中減去「purhase_id」 – NeoVe
你在哪個RDBMS代碼中給出了預期的輸出?你能否提供關於模式的細節? – vyegorov