首页 > 解决方案 > 我如何根据 id 计算 n 的总和?

问题描述

我有一个这样的查询集。我想要基于“id”的“n”总和。

这是我的查询集:

<QuerySet [{'id': 1, 'n': 0}, {'id': 2, 'n': 0}, {'id': 2, 'n': 1}, {'id': 3, 'n': 2}, {'id': 4, 'n': 0}, {'id': 5, 'n': 1}, {'id': 5, 'n': 0}]>

这是我的代码:

drivers = Driver.objects.values('id').annotate(
        travel_time=Sum(Case(
            When(car__ride__pickup_time__isnull=False,
                 then=(F('car__ride__dropoff_time') - F('car__ride__pickup_time'))),
            default=0
        )),
    ).annotate(
        n=Case(
            When(Q(travel_time__gt=t) & Q(car__model__gte=n), then=Count('car__ride')),
            output_field=IntegerField(),
            default=0
        )
    ).values('id', 'n')

我不知道如何根据 id 进行分组 :(

标签: djangopython-3.xgroup-bydjango-queryset

解决方案


您可以在 django 中使用values

在您的查询集中,您将其分组,.values('id', 'n')并且.values('id')

删除.values('id', 'n')它,它应该可以工作。

drivers = Driver.objects.values('id').annotate(
        travel_time=Sum(Case(
            When(car__ride__pickup_time__isnull=False,
                 then=(F('car__ride__dropoff_time') - F('car__ride__pickup_time'))),
            default=0
        )),
    ).annotate(
        n=Case(
            When(Q(travel_time__gt=t) & Q(car__model__gte=n), then=Count('car__ride')),
            output_field=IntegerField(),
            default=0
        )
    ).values_list('id', 'n')

它应该可以工作


推荐阅读