选择其他值而不是按django分组

时间:2014-11-19 12:55:13

标签: django

让我们举个例子

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.

有没有办法可以选择其他栏目而且不能出现在分组

1 个答案:

答案 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