如何在 Django ORM 中使用 GROUP BY
How to use GROUP BY in Django ORM
我陷入了一种情况,我需要一个等效的 Django ORM 用于以下 sql 查询。请帮助,我是 django 的新手。
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;
它正在对我不想要的 column1 和 column2 进行分组。
column2 没有出现在 group by 中,这将 return 错误
SELECT column1, sum(column3)
FROM table1
GROUP BY column1;
这很适合你
看看您正在有效地尝试做的是:
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
,这将变得很奇怪(也就是说,它将 select Column2 的第一个值,然后将对 Column1 中的每个值进行分组 - 这显然会给错误的结果(如果不是错误))。相反,有意义的是,您 select Column1 和 Column2 一起在 Group By 中,以便 groupby 合理地工作,否则不要在 selecting 列时写 Column2 。
如果这个解释让你满意,那么你在问题中所写的(你自己想出的解决方案)就可以解决你的目的。
我陷入了一种情况,我需要一个等效的 Django ORM 用于以下 sql 查询。请帮助,我是 django 的新手。
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;
它正在对我不想要的 column1 和 column2 进行分组。
column2 没有出现在 group by 中,这将 return 错误
SELECT column1, sum(column3)
FROM table1
GROUP BY column1;
这很适合你
看看您正在有效地尝试做的是:
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
,这将变得很奇怪(也就是说,它将 select Column2 的第一个值,然后将对 Column1 中的每个值进行分组 - 这显然会给错误的结果(如果不是错误))。相反,有意义的是,您 select Column1 和 Column2 一起在 Group By 中,以便 groupby 合理地工作,否则不要在 selecting 列时写 Column2 。
如果这个解释让你满意,那么你在问题中所写的(你自己想出的解决方案)就可以解决你的目的。