来自内部联接的Django和
我有这样一个数据库:来自内部联接的Django和,django,sum,inner-join,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) c
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
如果您需要cpu的总数量
MyCPU.objects.aggregate(total_cpu=Sum('cpu_count'))['total_cpu']
如果存在未连接的CPU对象,您可以执行以下操作以从所有计算机获取总和
MyMachine.objects.aggregate(total_cpu=Sum('cpu__cpu_count'))['total_cpu']
我认为最后一个问题是您正在搜索,因为在不同的机器中可能有相同的CPU对象。因为您使用的是外键,所以您可以这样做
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对象。不工作意味着什么?有错误吗?我希望是一个整数,目的是计算所有机器的CPU数量之和。但它返回一个查询集,然后执行
queryset.values()
。然后,您将得到dict的结果。不过,连接的意义是什么?如果您想要一个值,为什么不MyCPU.objects.aggregate(total\u cpu=Sum('cpu\u count'))
?我指的是所有机器中的cpu数量。我们需要选择机器和CPU表格都不工作的方式?有错误吗?我希望是一个整数,目的是计算所有机器的CPU数量之和。但它返回一个查询集,然后执行queryset.values()
。然后,您将得到dict的结果。不过,连接的意义是什么?如果您想要一个值,为什么不MyCPU.objects.aggregate(total\u cpu=Sum('cpu\u count'))
?我指的是所有机器中的cpu数量。我们需要选择机器表和CPU表,然后如何求和它们?不是通过写一个循环来更新答案,从而精确地获得cpu`SYE的总数。最后一个应该几乎正确。但是,它返回的结果与原始SQL略有不同。你能告诉我到底发生了什么,然后我们如何计算它们吗?不是通过写一个循环来更新答案,从而精确地获得cpu`SYE的总数。最后一个应该几乎正确。但是,它返回的结果与原始SQL略有不同。你能告诉我到底发生了什么事吗