python - 从字段中减去数据 - PostgreSQL

标签 python postgresql odoo

我在 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 中有 2 个模块,它们管理产品(销售、库存、采购等),当我批准采购订单时,我需要从名为 的字段中减去采购的产品数量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

我希望我已经解释清楚了。

最佳答案

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

SELECT sum(a - b) FROM the_table;

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

SELECT a - sum(b) FROM the_table;

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

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

关于python - 从字段中减去数据 - PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16885951/

相关文章:

sql - 子查询中的动态字段名?

postgresql - 为 pg_trgm 设置默认限制

python - 如何在Odoo8中调用其他 Sprite 的 Sprite ?

python - 如何设置 Odoo 智能按钮的顺序?

python多处理pickle协议(protocol)

python - 有没有办法使用 kafka-python 库创建日志压缩主题?

PHP 从 postgresql 数据库构建特定的 JSON 字符串

python - setFont(Times-Roman) 不能缺少 T1 文件吗?

python - 与gitlab-ci中的父范围docker容器共享docker容器中的目录?

python - boto3 s3 对象过期 "MalformedXML"错误