来自INNER JOIN的Django SUM

问题描述 投票:0回答:1

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

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'))
django sum inner-join
1个回答
2
投票

由于您使用外键,您可以这样做

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对象。

© www.soinside.com 2019 - 2024. All rights reserved.