2016-06-14 53 views
0

我陷入了一种情况,我需要一个等效的Django ORM用于以下sql查询。请帮忙,我是django的新手。如何在Django ORM中使用GROUP BY

SELECT column1, column2, sum(column3) as total 
FROM table1 
GROUP BY column1; 

我已经试过 Table1.objects.values('column1', 'column2').annotate(total=Sum(column3)) 这使得上述ORM,因为这:

SELECT column1, column2, sum(column3) as total 
FROM table1 
GROUP BY column1, column2; 

据分组列1列2和我不想要。

+0

你尝试了什么? – molivier

+0

寻求帮助的问题必须包括*期望的行为*,*特定问题或错误*和*在问题本身**中重现**所需的最短代码*。没有**明确问题陈述**的问题对其他读者没有用处。请参阅:[如何创建最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。 –

+0

亲爱的@jonathan先阅读文档 - https://docs.djangoproject.com/en/1.9/topics/db/aggregation/#order-by –

回答

2

看看你实际上要做的是:

Column1 Column2 Column3 
MP  C1  100 
MP  C1  110 
MP  C2  100 
MH  C3  50 
MH  C4  85 
RJ  C5  100 

现在如果你做SELECT Column1, Column2, sum(Column3) as total FROM table1 GROUP BY Column1这会变得很奇怪(也就是说,它会选择Column2的第一个值,然后再与Column1中的每个值进行分组 - 这显然会给wr ong结果(如果不是错误))。相反,有意义的是,您可以在分组依据中一起选择Column1和Column2,以便groupby以合理的方式工作,或者在选择列时不写入Column2。

如果您的解释看起来令人满意,那么您在您的问题(您自己提出的解决方案)中写下的内容将能够解决您的问题。

1

COLUMN2不会出现在GROUP BY将返回错误

SELECT column1, sum(column3) 
FROM table1 
GROUP BY column1; 

这个工作得很好,你