使用 Django 的查询集分组
Group By with Django's queryset
我在 Django 中有一个模型,这是它在较少字段时的样子 -
我想对 w.r.t buy_price_per_unit
行进行分组,同时我还想知道 buy_price_per_unit
.
的总销售单位
所以在我们的例子中只有两个不同的 buy_price_per_unit
可用 (9, 10)
。因此查询将 return 只有两行这样的 -
我必须满足的最后一个条件是查询结果应按 buy_price_per_unit
.
的降序排列
这是我目前尝试过的-
orders = Orders.objects.values('id', 'buy_price_per_unit')\
.annotate(units=Sum("units"))\
.order_by("-buy_price_per_unit")\
上面查询的响应是 -
[
{
"id": 13,
"buy_price_per_unit": 10,
"units": 1
},
{
"id": 12,
"buy_price_per_unit": 9,
"units": 10
},
{
"id": 14,
"buy_price_per_unit": 9,
"units": 2
},
{
"id": 15,
"buy_price_per_unit": 9,
"units": 1
}
]
此响应的问题在于,即使价格相同,也会return编辑多条记录。
发生这种情况是因为您在 .values
中有 id
,并且根据基础查询,它正在对 id
和 buy_price_per_unit
进行分组。
所以只需从 .values
中删除 id
orders = Orders.objects.values('buy_price_per_unit')\
.annotate(units=Sum("units"))\
.order_by("-buy_price_per_unit")\
我在 Django 中有一个模型,这是它在较少字段时的样子 -
我想对 w.r.t buy_price_per_unit
行进行分组,同时我还想知道 buy_price_per_unit
.
所以在我们的例子中只有两个不同的 buy_price_per_unit
可用 (9, 10)
。因此查询将 return 只有两行这样的 -
我必须满足的最后一个条件是查询结果应按 buy_price_per_unit
.
这是我目前尝试过的-
orders = Orders.objects.values('id', 'buy_price_per_unit')\
.annotate(units=Sum("units"))\
.order_by("-buy_price_per_unit")\
上面查询的响应是 -
[
{
"id": 13,
"buy_price_per_unit": 10,
"units": 1
},
{
"id": 12,
"buy_price_per_unit": 9,
"units": 10
},
{
"id": 14,
"buy_price_per_unit": 9,
"units": 2
},
{
"id": 15,
"buy_price_per_unit": 9,
"units": 1
}
]
此响应的问题在于,即使价格相同,也会return编辑多条记录。
发生这种情况是因为您在 .values
中有 id
,并且根据基础查询,它正在对 id
和 buy_price_per_unit
进行分组。
所以只需从 .values
id
orders = Orders.objects.values('buy_price_per_unit')\
.annotate(units=Sum("units"))\
.order_by("-buy_price_per_unit")\