来自INNER JOIN的Django SUM
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了来自INNER JOIN的Django SUM相关的知识,希望对你有一定的参考价值。
我有一个像这样的数据库:
class MyCPU(models.Model):
cpu_name = models.CharField(max_length=100)
cpu_count = models.IntegerField()
class MyMachine(models.Model):
hostname = models.CharField(max_length=50)
ip = models.CharField(max_length=50)
cpu = models.ForeignKey(CPU, on_delete=models.CASCADE)
如何在Django中实现遵循原始SQL命令的结果?
select sum(cpu_count) as sum_cpu from my_machine inner join my_cpu on my_machine.cpu_id=my_cpu.id
我基本上想要总结所有机器中的CPU数量。
我试过这个解决方案,但它没有用
Machine.objects.annotate(total_cpu=Sum('cpu__cpu_count'))
答案
由于您使用外键,您可以这样做
MyMachine.objects.values('hostname', 'ip', 'cpu__cpu_count')
这将获得每台机器多少cpu`s。
如果你需要cpu的总数
MyCPU.objects.aggregate(total_cpu=Sum('cpu_count'))['total_cpu']
如果存在未连接的CPU对象,则可以执行以下操作以从所有计算机获取总和,
MyMachine.objects.aggregate(total_cpu=Sum('cpu__cpu_count'))['total_cpu']
我认为最后一个是你正在寻找的,因为在不同的机器上有可能存在相同的CPU对象。
以上是关于来自INNER JOIN的Django SUM的主要内容,如果未能解决你的问题,请参考以下文章
MySQL SUM () INNER JOIN 和 LIMIT 使用 FOREIGN KEY
尝试将 INNER JOIN 和 GROUP BY SQL 与 SUM 函数一起使用,但不工作