首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有注释的Django中的一种复杂查询

带有注释的Django中的一种复杂查询
EN

Stack Overflow用户
提问于 2011-06-22 18:36:19
回答 1查看 714关注 0票数 1

我必须上这样的课

代码语言:javascript
运行
复制
class JobTitle(models.Model):
    name = models.CharField(max_length=500,null=False,blank=False)


class Employer(models.Model):
     name = models.CharField(max_length=500,null=False,blank=False)
     jobtitle = models.ForeignKey(JobTitle,null=False)
     revenue = models.IntegerField(null=False)

首先,我想要获得雇主数量最多的前5个职位,其次,我需要评估这5个职位的雇主的平均收入。

我可能会得到前5个职位头衔,比如

jtList = JobTitle.objects.filter(isActive=True).annotate(employer_count=Count('employer')).order_by('employer_count')[:5]

我可能会仔细检查每个职位和他们的雇主,将他们的收入相加,然后将他们的总数相除,但这当然是一个糟糕且效率低下的解决方案。

如何在django中高效地实现这样的操作?

谢谢

JobTitle.objects.annotate(jobtitle_count=Count('jobtitle')).order_by('-jobtitle_count')[:5]

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-22 18:54:42

以相同货币计算的收入总和

如果所有的收入数字都使用相同的货币,您可以使用annotateAvg来完成此操作。

代码语言:javascript
运行
复制
job_titles = JobTitle.objects.filter(isActive=True
                              ).annotate(employer__count=Count('employer'), 
                                         average_revenue=Avg('employer__revenue'),
                              ).order_by('employer__count')[:5]

以不同货币计算收入总和

在您提到的评论中,您希望将英镑和欧元的收入换算成美元。恐怕我没有一个优雅的解决方案。

一种方法是使用values()获取每种货币的总和:

代码语言:javascript
运行
复制
# look at the employers in the top job titles
employers = Employer.objects.filter(job_title=job_titles)
currency_totals = employers.values('job_title', 'currency', Count('revenue'), Sum('revenue'))

这将返回一个ValuesQuerySet,例如

代码语言:javascript
运行
复制
[{'job_title':1, 'currency': 'GBP', 'revenue__sum': 20.0, 'revenue__count': 1},
 {'job_title':1, 'currency': 'EUR', 'revenue__sum': 35.0, 'revenue__count': 2},
 {'job_title':2, 'currency': 'USD', 'revenue__sum': 50.0, 'revenue__count': 1},
 ...
]

然后,您可以遍历视图中的结果,将每个revenue__sum转换为USD,并将其添加到该职位的运行总数中。

这样,您只需要一次查询即可获得给定job_titles集的收入和。但是,因为我们在视图中处理结果,所以您不能让数据库对其进行过滤,或者按收入计算进行排序,例如“显示等效收入大于1000美元的职务”。

我很有兴趣看到任何其他方法--我们有客户以英镑、欧元和美元向我们付款,因此我们需要生成类似的报告。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6438466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档