我需要计算子查询中的行数,这是我的 sqlite 解决方案。
class SQCount(Subquery):
"""Count lines in subquery"""
template = "(SELECT count(*) FROM (%(subquery)s) _count)"
output_field = models.IntegerField()
sub = MyModel.objects.filter(user=OuterRef(OuterRef('id'))).values('id')
qs = qs.annotate(count_total=SQCount(sub))
它适用于 sqlite,但不适用于 MySQL(抱怨“where”子句中的未知列)。任何帮助表示赞赏。
这是在 Django 中计算子查询行数的正确方法
subquery = Subquery(
Child.objects.filter(
parent_id=OuterRef('id')
)
.order_by()
).values(
'parent'
).annotate(
count=Count('pk')
).values(
'count'
),
output_field=IntegerField(),
)
Parent.objects.annotate(child_count=Coalesce(subquery, 0))
- The
.order_by()
如果有的话将取消订单
- 第一价值观
.values('parent')
将引入右分组
-
.annotate(count=Count('pk'))
将注释(每行广告)我们正在寻找的答案
- 第二个值
.values('count')
将限制行数count
只
-
Coalesce
将返回第一个非空值或零
这对于 Django 来说是很棘手的,但是非常高效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)