来自INNER JOIN的Django SUM

时间:2018-01-02 09:43:55

标签: django sum inner-join

我有一个像这样的数据库:

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'))

1 个答案:

答案 0 :(得分:2)

由于您使用外键,您可以

MyMachine.objects.values('hostname', 'ip', 'cpu__cpu_count')

这将使每台机器获得多少cpu。

如果你需要cpu的总数

MyCPU.objects.aggregate(total_cpu=Sum('cpu_count'))['total_cpu']

如果有未连接的CPU对象,您可以执行以下步骤以从所有计算机获取总和,

MyMachine.objects.aggregate(total_cpu=Sum('cpu__cpu_count'))['total_cpu']

我认为最后一个是您正在搜索的,因为在不同的机器中可能存在相同的CPU对象。