来自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的主要内容,如果未能解决你的问题,请参考以下文章

INNER JOIN 改变 SUM 结果

MySQL SUM () INNER JOIN 和 LIMIT 使用 FOREIGN KEY

django orm中的INNER JOIN

尝试将 INNER JOIN 和 GROUP BY SQL 与 SUM 函数一起使用,但不工作

在 Django 模型上执行 INNER JOIN、GROUP BY 和 COUNT

来自同一个表的多个 INNER JOIN