【问题标题】:How i can calculate sum of n based on id?我如何根据 id 计算 n 的总和?
【发布时间】:2019-11-21 09:14:53
【问题描述】:

我有一个这样的查询集。我想要基于“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 进行分组:(

【问题讨论】:

    标签: django python-3.x group-by django-queryset


    【解决方案1】:

    您可以在 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')
    

    它应该可以工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-10
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 2022-01-10
      相关资源
      最近更新 更多