这就是我所拥有的。
class Array(Subquery):
template = 'ARRAY(%(subquery)s)'
class A(models.Model):
...
class B(models.Model):
a = models.ForeignKey(A)
class C(models.Model):
b = models.ForeignKey(B)
b_sub = B.objects.filter(a=OuterRef('pk').annotate(items=Count('c').values('items')
result = a.objects.annotate(items=Array(b_sub))
我得到了
# >>> result.first().items
[4, 6, 10]
但是我需要为每个items
行添加所有A
(4 + 6 + 10)-> 20的总和。
赞
# >>> result.first().items
20
有可能吗?
答案 0 :(得分:0)
不确定,理解正确或没有问题 但是sql查询呢,像这样:
SELECT ID, (SELECT SUM(A) FROM UNNEST(MY_COLUMN) AS A) AS TOTAL FROM MY_TABLE;
答案 1 :(得分:0)
类似这样的东西:
from django.db.models import Sum
result = a.objects.annotate(items=Array(b_sub)).aggregate(Sum(items))
答案 2 :(得分:0)
以下为解决方案
class SubqueryCount(Subquery):
template = '(SELECT count(*) FROM (%(subquery)s) _count)'
output_field = IntegerField()
sub = C.objects.filter(b__a=OuterRef('pk')).only('pk')
result = a.objects.annotate(count=SubqueryCount(sub))