Django的。如何按付款人组汇总金额

时间:2016-04-08 05:40:32

标签: django django-models aggregate

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

我们有一个表"交易" ,其中包含以下列: ID,付款人,收件人,金额和created_at。

例如:

mJavaDetector = new CascadeClassifier( mCascadeFile.getAbsolutePath() );
//must add this line
mJavaDetector.load( mCascadeFile.getAbsolutePath() );

如何:

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

2。获取付款人和兑换商的交易总额(例如来自" Kyiv CityHoll"以及#34; Google"的所有交易)

谢谢!

1 个答案:

答案 0 :(得分:1)

使用annotate and Sum/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,请不要忘记获取正确的属性来检索名称(或执行单独的查询以获取其完整对象)