【问题标题】:Django select distinct sumDjango选择不同的总和
【发布时间】:2010-03-20 02:02:58
【问题描述】:

我有以下(非常简化的)表结构:

Order:
    order_number = CharField
    order_invoice_number = CharField
    order_invoice_value = CharField

一个发票编号可以在多个订单上相同(订单 O1 的发票编号为 I1,订单 O2 的发票编号为 I1,等等)。具有相同发票编号的所有订单具有相同的发票价值。

例如:

Order no.    Invoice no.    Value
O1           I1             200
O2           I1             200
O3           I1             200
04           I2             50
05           I3             100

我要做的是对所有发票值进行总和,但不要多次添加具有相同编号的发票。以上各项的总和为:200+50+100。

我尝试使用

s = orders.values('order_invoice_id').annotate(total=Sum('order_invoice_value')).order_by() 

s = orders.values('order_invoice_id').order_by().annotate(total=Sum('order_invoice_value'))

但我没有得到想要的结果。我从这里的类似问题中尝试了几种不同的解决方案,但我无法得到想要的结果。

我不知道我做错了什么以及我实际上应该做些什么来获得一个只使用每个发票价值一次的总和。

编辑:

我刚刚意识到在 O5 我写的是 I2 而不是 I3。现在写得很好。

上述数据的预期结果是每个发票价值的总和,仅使用一次。总和 = I1+I2+I3 = 200+50+100 = 350

【问题讨论】:

  • 请添加您预期或期望的结果。例如:I1 总计 = 600,I2 总计 = 150。
  • 我编辑了我的问题并添加了所需的结果,还发现我写的数据有错误。

标签: django django-queryset


【解决方案1】:

我会说你的模型结构是错误的。您应该有一个订单表,其中包含订单号和价值,以及一个单独的发票相关表,其中包含从 Invoice 到 Order 的外键。那么你的查询就很简单了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多