django - 我如何根据 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 进行分组 :(
解决方案
您可以在 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')
它应该可以工作
推荐阅读
- javascript - Angular - 在 HTTP 请求中发送部分数据模型的最佳方法
- android - Android Camera2 API 闪存问题
- linux - 是否可以通过 Linux 上的 iptables 将端口映射分配给现有的 Docker 容器?
- javascript - 平滑滚动不适用于 p 标签内的标签
- python - 在 JSON 对象中写出 Boto3 响应并在 AWS Lambda 函数中上传到 S3
- sql - 更改列的数据类型
- apache-camel - 如何使用 Apache Camel 从 ActiveMQ 主题中读取旧的入队消息
- android - 如何将成功同步的 android studio 中的相关文件导入另一台机器
- node.js - 如何在 oclif 中使用 cli-ux 提示符测试用户输入?
- python - Pygame:在确定的棋盘上生成 x 个随机和不同的坐标