子查询中的 Django 计数行
Django Count lines in a Subquery
我需要计算子查询中的行数,这是我的 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))
.order_by()
将取消订单
- 第一个值
.values('parent')
将引入右分组
.annotate(count=Count('pk'))
将注释(每行广告)我们正在寻找的答案
- 第二个值
.values('count')
将行限制为 count
独占
Coalesce
将 return 首先不是空值或零
从 Django 做到这一点很棘手,但效率很高。
我需要计算子查询中的行数,这是我的 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))
.order_by()
将取消订单- 第一个值
.values('parent')
将引入右分组 .annotate(count=Count('pk'))
将注释(每行广告)我们正在寻找的答案- 第二个值
.values('count')
将行限制为count
独占 Coalesce
将 return 首先不是空值或零
从 Django 做到这一点很棘手,但效率很高。