두 개의 테이블이 있습니다.
티켓 테이블
id paid_with_tax
1 5
2 6
3 7
티켓 조정 테이블
id ticket_id value_with_tax
1 1 2
2 1 1
3 1 2
4 1 3
5 2 5
내가 사용하는 쿼리 :
use = 0
Ticket.objects.all().annotate(
paid_amount=Sum(
F('paid_with_tax') +
Coalesce(F('ticketadjustment__value_with_tax'), 0) * use
)
)
쿼리는 다음을 반환합니다.
[
{id: 1, paid_amount: 7},
{id: 1, paid_amount: 6},
{id: 1, paid_amount: 7},
{id: 1, paid_amount: 8},
{id: 2, paid_amount: 11},
{id: 3, paid_amount: 7},
]
그러나 Ticket Table id = 1 값이 TicketAdjustment Table 값에 의해 중복되므로 위의 내용은 올바르지 않습니다.
TicketAdjustment Table 값을 합산하고 다음을 반환하는 쿼리를 어떻게 얻을 수 있습니까?
[
{id: 1, paid_amount: 13},
{id: 2, paid_amount: 11},
{id: 3, paid_amount: 7},
]
여기에 문제에 대한 해결책이 있습니다.
Ticket.objects.all().annotate(
paid_amount=(F('paid_with_tax') +
Sum(Coalesce(F('ticketadjustment__value_with_tax'), 0))
)
).values_list('id', 'paid_amount')
values_list
결과에서 원하는 필드를 선택하십시오.
귀하의 기본 요청에는 큰 문제가 있습니다.
Sum(F('paid_with_tax') + Coalesce(F('ticketadjustment__value_with_tax'), 0) * use)
이것은 value_with_tax
0으로 miltiply ligne . 그러니 0을주세요. 다음과 같습니다.
Sum(F('paid_with_tax'))
당신 value_with_tax
은 각 티켓 에 대한 합계를 원합니다 Sum
.
Sum(Coalesce(F('ticketadjustment__value_with_tax'), 0))
그리고 값을 추가 한 후 paid_with_tax
NB : use
모르겠다는 것이 목표이기 때문에 변수를 제거합니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다