📜  django queryset group by sum - Python (1)

📅  最后修改于: 2023-12-03 15:30:28.929000             🧑  作者: Mango

Django QuerySet Group By Sum

在Django中,我们通常会用到QuerySet来处理数据库查询。有时候我们会需要将查询结果按照某个字段进行分组,并对分组后的结果进行统计求和操作。这就需要我们用到Django QuerySet的group by和sum方法。

group by

group by可以将QuerySet按照指定字段分组。例如我们有一个User表,该表有name和age两个字段。我们可以根据name分组:

users = User.objects.values('name').annotate(total=Count('id'))

for user in users:
    print(user['name'], user['total'])

以上代码将会输出每个name的总数。

sum

sum可以对QuerySet进行求和操作。例如我们有一个Order表,该表有price和count两个字段。我们可以对所有订单的总价进行求和:

total_price = Order.objects.aggregate(total=Sum('price'))['total']

以上代码将会输出所有订单的总价。

group by和sum的组合

group by和sum还可以进行组合使用。例如我们要按照用户分组,并统计他们的购买总价:

users = User.objects.values('name').annotate(total_price=Sum('order__price'))

for user in users:
    print(user['name'], user['total_price'])

以上代码将会输出每个用户的购买总价。

总体来说,group by和sum是QuerySet中非常强大的两个方法,可以帮助我们方便快捷地进行统计操作。