姜戈.如何按付款方组合计金额



我们开发了一种反腐败分析工具,用于分析政府交易并显示可视化图表。

我们有一个"交易"表,列为:id、付款人、收款人、金额和created_at

例如:

 1. "Kyiv CityHoll" | "Microsoft" | $130 | 2016.12.02
 2. "Odessa CityHoll" | "Microsoft" | $100 | 2016.12.02
 3. "Kyiv CityHoll" | "Google" | $1000 | 2016.12.02
 4. ...

如何:

1.按付款人(例如"Kyiv CityHoll")获取交易总额,并按金额对顶级付款人进行评级(必须对相同的付款人进行分组)?

2.按付款人和收款人获取交易总额(例如,从"基辅CityHoll"到"谷歌"的所有交易)

谢谢!

使用annotateSum/Count,可以执行大量聚合查询。以下是您的示例的查询:

from django.db.models import Sum
# 1. Get total of transactions per payer, ranked by total
Transactions.objects.values('payer').annotate(total=Sum('amount')) 
                    .order_by('-total')
# 2. Get total per payer/receiver, ranked by total
Transactions.objects.values('payer', 'receiver').annotate(total=Sum('amount')) 
                    .order_by('-total')

因此,您将获得dict的列表(因为它与您的模型不匹配),因此如果payer和/或receiver是ForeignKey,请不要忘记获取正确的属性来检索名称(或单独查询以获取其完整对象)

最新更新