#10060: Multiple table annotation failure
----------------------------------------------+-----------------------------
          Reporter:  svsha...@intellecap.net  |         Owner:          
            Status:  new                      |     Milestone:  post-1.0
         Component:  ORM aggregation          |       Version:  SVN     
        Resolution:                           |      Keywords:          
             Stage:  Accepted                 |     Has_patch:  0       
        Needs_docs:  0                        |   Needs_tests:  0       
Needs_better_patch:  0                        |  
----------------------------------------------+-----------------------------
Old description:

> Annotating across multiple tables results in wrong answers. i.e.
>
> In [110]: total =
> Branch.objects.all().annotate(total=Sum('center__client__loan__amount'))
>
> In [111]: total[0].total
> Out[111]: 3433000
>
> In [112]: repaid =
> Branch.objects.all().annotate(repaid=Sum('center__client__loan__payment_schedule__payments__principal'))
>
> In [113]: repaid[0].repaid
> Out[113]: 1976320.0
>
> In [114]: both =
> Branch.objects.all().annotate(total=Sum('center__client__loan__amount'),repaid=Sum('center__client__loan__payment_schedule__payments__principal'))
>
> In [115]: both[0].repaid
> Out[115]: 1976320.0
>
> In [116]: both[0].total
> Out[116]: 98816000
>           ^^^^^^^^^^^
>
> Compare the output of total in 116 vs. 111 (the correct answer).

New description:

 Annotating across multiple tables results in wrong answers. i.e.

 {{{
 In [110]: total =
 Branch.objects.all().annotate(total=Sum('center__client__loan__amount'))

 In [111]: total[0].total
 Out[111]: 3433000

 In [112]: repaid =
 
Branch.objects.all().annotate(repaid=Sum('center__client__loan__payment_schedule__payments__principal'))

 In [113]: repaid[0].repaid
 Out[113]: 1976320.0

 In [114]: both =
 
Branch.objects.all().annotate(total=Sum('center__client__loan__amount'),repaid=Sum('center__client__loan__payment_schedule__payments__principal'))

 In [115]: both[0].repaid
 Out[115]: 1976320.0

 In [116]: both[0].total
 Out[116]: 98816000
           ^^^^^^^^^^^
 }}}

 Compare the output of total in 116 vs. 111 (the correct answer).

Comment (by ubernostrum):

 (formatting)

-- 
Ticket URL: <http://code.djangoproject.com/ticket/10060#comment:3>
Django <http://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to