【问题标题】:How to get Sum with group by in Django query如何在 Django 查询中通过 group by 获取 Sum
【发布时间】:2019-07-22 13:52:37
【问题描述】:

我试图通过 product_id 获取我的数量与组的总和,但它返回多条记录。

我正在研究 Django,并试图通过这样的方式与 group 求和。我尝试使用注释和值。

productinventory_ds = (
                ProductInventory.objects.filter(product_id=product_id)
                .values("product_id")
                .annotate(
                    instock_quantity_s=Sum("instock_quantity"),
                    delivered_quantity_s=Sum("delivered_quantity"),
                )
            )

但不是给出一个产品 ID 和所有数量的总和。此查询返回具有相同产品 ID 的多个结果。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    您应该添加.order_by(..) 来强制分组,例如:

    productinventory_ds = ProductInventory.objects.filter(
        product_id=product_id
    ).values('product_id').annotate(
        instock_quantity_s=Sum('instock_quantity'),
        delivered_quantity_s=Sum('delivered_quantity')
    ).order_by('product_id')

    但是,您似乎想提取 single product_id 的列。在这种情况下,.aggregate(..) 更有意义:

    productinventory_ds = ProductInventory.objects.filter(
        product_id=product_id
    ).aggregate(
        instock_quantity_s=Sum('instock_quantity'),
        delivered_quantity_s=Sum('delivered_quantity')
    )

    这将返回一个字典,其中包含两个作为键的项目 'instock_quantity_s''delivered_quantity_s'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 2020-10-03
      • 1970-01-01
      • 2020-05-16
      • 2023-03-21
      • 2021-02-26
      • 1970-01-01
      相关资源
      最近更新 更多