让我们举个例子
OrderItem.objects.filter(order=order).values('item')\
.annotate(number_sold= Count('item'), Amount= Sum('total'))
This query return me 3 columns which are item, number_sold, Amount....
If add other columns in values it will also be added in Group by clause.
有没有办法可以选择其他栏目而且不能出现在分组
中答案 0 :(得分:0)
没有。在SQL级别,如果它不在group by子句中,则需要对其执行聚合。由于您没有指定要在其上发生的聚合,因此如果应该返回它,则需要进入group by子句。
编辑:
如果您将下表视为数据库中的表:
ColA | ColB | ColC
1 | A | True
1 | A | False
1 | B | True
1 | B | False
2 | A | True
2 | A | False
2 | B | True
2 | B | False
如果您想要ColA的最大值,您可以运行select max(ColA) from table;
。这将返回2.
但是,如果您指定要返回列ColB,则系统需要知道如何处理它们。否则它不知道要显示哪些,因为很明显有4行的ColA值为2,但它们有2个不同的ColB值。
这就是小组发挥作用的地方。如果你这样做
select max(ColA), ColB from table group by ColB;
它将返回:
Max | ColB
2 | A
2 | B