【问题标题】:Joining and grouping Django querysets加入和分组 Django 查询集
【发布时间】:2019-12-18 04:33:28
【问题描述】:
m1 = myModel.objects.filter(...)
m2 = myModel.objects.filter(...)

n1 = m1.values("date").annotate(car_crashes=Sum('car_crashes') * 1).values("date", "car_crashes")
n2 = m2.values("date").annotate(car_crashes=Sum('car_crashes') * 2).values("date", "car_crashes")

通过这段代码,我得到了 n1 和 n2 两个查询集:

<QuerySet [{'date': datetime.date(2008, 4, 1), 'car_crashes': Decimal(1.000)}, ... ]>
<QuerySet [{'date': datetime.date(2011, 4, 1), 'car_crashes': Decimal(2.000)}, ... ]>

请注意,它们的大小可能不同,并且某些日期可能在一个查询集中但不在另一个查询集中。

如何在date 字段上对这两个查询集进行分组并求和car_crashes

我正在尝试这个:

(n1 | n2).annotate(car_crashes=Sum('car_crashes')).values("date", "car_crashes")

还有这个

n1.union(n2).annotate(cc=Sum('car_crashes'))

但是

无法计算 Sum('car_crashes'):'car_crashes' 是一个聚合

【问题讨论】:

    标签: python django django-orm


    【解决方案1】:

    使用union 运算符:

    qs3 = m1.union(m2)
    qs3.annotate(car_crashes=Sum('car_crashes')).values("date", "car_crashes")
    

    我不知道为什么你不能像显示的那样使用 m1 和 m2 而不是 n1 和 n2。

    Reference 在联合上。

    【讨论】:

    • 在 n1 中我将总和乘以 1,在 n2 中我乘以 2。如果我不加区分地聚合所有内容,则此效果将丢失。
    • .union 在你的编辑工作之前使用,但是我不能“分组”(带注释),它给了我与上面相同的错误:无法计算总和('car_crashes') : 'car_crashes' 是一个聚合
    猜你喜欢
    • 2015-08-15
    • 2012-03-28
    • 2011-08-05
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    相关资源
    最近更新 更多