如何在 django 中将两列与 group by 相乘和求和
Posted
技术标签:
【中文标题】如何在 django 中将两列与 group by 相乘和求和【英文标题】:How multiply and sum two columns with group by in django 【发布时间】:2013-08-15 16:22:00 【问题描述】:我需要在 Django 中做如下查询:
SELECT sum(T.width * T.height) as amount
FROM triangle T
WHERE T.type = 'normal'
GROUP BY S.color
如何使用您的 django ORM 执行此操作? 我试过这个:
Triangle.objects.filter(type='normal').\
extra(select='total':'width*height').\
values('id', 'total').\
annotate(amount=Sum('total'))
但它不起作用,我得到的错误是 TOTAL 不在模型中。我该如何解决?
【问题讨论】:
【参考方案1】:您可以这样做:
Triangle.objects.filter(type="normal").values('color').annotate(amount=Sum('id', field="width * height")
这将产生以下查询(为了便于阅读,我进行了简化):
SELECT color, sum(width * height) as amount
FROM triangle
WHERE type = 'normal'
GROUP BY color
注意:我假设 color
是 Triangle
模型的字段,就像其他字段一样。
【讨论】:
这是一个未记录的功能吗...?我在 Django 文档聚合页面上的任何地方都看不到它。 docs.djangoproject.com/en/1.8/topics/db/aggregation @tufelkinder 我使用 django 已经有一段时间了,答案是很久以前发布的。快速查看文档后,我没有看到field
关键字记录在案。很好,如果您能找到文档参考,将很高兴。谢谢!
我尝试在 Django 1.11 上使用这个,但是 field
参数没有作为示例计算,amount
只是由 id
列的值填充。以上是关于如何在 django 中将两列与 group by 相乘和求和的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL Server 2012 中将两个 nvarchar 列与 Unicode 文本进行比较
如何在laravel中将Group By与Join表一起使用[重复]
如何在 MS SQL 中将 last_value 与 group by 结合使用?