【发布时间】:2020-01-12 06:29:22
【问题描述】:
我想使用可用作子查询的查询。但我注意到这样的查询:
x = Deal.all_objects.filter(state='created').values('id').annotate(cnt=Count('id')).values('cnt')
生产
SELECT COUNT("deals_deal"."id") AS "cnt"
FROM "deals_deal"
WHERE "deals_deal"."state" = created
GROUP BY "deals_deal"."id"
我不需要GROUP BY,我只想计算匹配过滤器的报价。
我不想使用.count(),因为它不允许我编写这样的查询:
Deal.all_objects.filter(
Q(creator=OuterRef('pk')) | Q(taker=OuterRef('pk'), state='completed')
).annotate(cnt=Count('pk')).values('cnt')
如何修改上述查询,使其在没有GROUP BY 的情况下计数?
【问题讨论】:
-
annotate(cnt=Count('id'))应该做什么?这始终为 1,因为您正在计算行本身的列。
标签: sql django django-queryset