Django 基础教程

Django 查询

Django 展示数据

Django Admin

Django 模板

Django 表单组件

Django 高级

Django FAQ

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/django-aggregate-annotate.html

django 聚合和分组查询的常用方法详解


Django 提供了强大的聚合(Aggregation)和分组查询(Grouping)功能,允许你在数据库中执行复杂的聚合计算和数据分组操作。在本文中,我将详细介绍 Django 中聚合和分组查询的所有方法,并附带带有详细注释的代码示例,以及相关函数的使用示例。

聚合(Aggregation)是对数据集进行某种操作,并返回一个单一的值作为结果,例如计算平均值、总和、最大值、最小值等。分组查询(Grouping)是将数据集按照某个字段进行分组,并对每个组内的数据进行聚合操作。在 Django 中,这些操作都是通过 QuerySet API 实现的。

首先,我们需要导入 Django 的模型和聚合函数:

from django.db import models
from django.db.models import Avg, Sum, Max, Min, Count

然后,我们假设有一个模型 Book,它有两个字段: titleprice

class Book(models.Model):
    title = models.CharField(max_length=100)
    price = models.DecimalField(max_digits=6, decimal_places=2)

现在,让我们来介绍各种聚合和分组查询的方法。

聚合查询

平均值(Avg)

计算图书价格的平均值。

avg_price = Book.objects.all().aggregate(avg_price=Avg('price'))
print(avg_price['avg_price'])

总和(Sum)

计算图书价格的总和。

total_price = Book.objects.all().aggregate(total_price=Sum('price'))
print(total_price['total_price'])

最大值(Max)

找到图书价格的最大值。

max_price = Book.objects.all().aggregate(max_price=Max('price'))
print(max_price['max_price'])

最小值(Min)

找到图书价格的最小值。

min_price = Book.objects.all().aggregate(min_price=Min('price'))
print(min_price['min_price'])

计数(Count)

计算图书的总数。

book_count = Book.objects.all().count()
print(book_count)

分组查询

分组并计算平均值

按照图书标题的首字母进行分组,并计算每个组内图书价格的平均值。

grouped_avg_price = Book.objects.values('title__startswith').annotate(avg_price=Avg('price'))
for item in grouped_avg_price:
    print(f"{item['title__startswith']}: {item['avg_price']}")

分组并计算总和

按照图书标题的首字母进行分组,并计算每个组内图书价格的总和。

grouped_total_price = Book.objects.values('title__startswith').annotate(total_price=Sum('price'))
for item in grouped_total_price:
    print(f"{item['title__startswith']}: {item['total_price']}")

分组并找到最大值

按照图书标题的首字母进行分组,并找到每个组内图书价格的最大值。

grouped_max_price = Book.objects.values('title__startswith').annotate(max_price=Max('price'))
for item in grouped_max_price:
    print(f"{item['title__startswith']}: {item['max_price']}")

分组并找到最小值

按照图书标题的首字母进行分组,并找到每个组内图书价格的最小值。

grouped_min_price = Book.objects.values('title__startswith').annotate(min_price=Min('price'))
for item in grouped_min_price:
    print(f"{item['title__startswith']}: {item['min_price']}")

分组并计数

按照图书标题的首字母进行分组,并计算每个组内的图书数量。

grouped_book_count = Book.objects.values('title__startswith').annotate(book_count=Count('id'))
for item in grouped_book_count:
    print(f"{item['title__startswith']}: {item['book_count']}")

以上就是 Django 中聚合和分组查询的常用方法,以及相应的代码示例。通过这些强大的功能,你可以轻松地对数据库中的数据进行复杂的计算和分组操作。希望本文能帮助你更好地理解和应用 Django 的聚合和分组查询功能。

在Elasticsearch中,聚合是用于从数据中提取有关信息的功能强大的工具。###TermsAggregation(词条聚合)词条聚合用 ...
在Django中,分组查询是指对数据库中的数据进行聚合操作,将具有相同特征的数据分组并进行计算。###使用annotate()和F()表达式 ...
在Elasticsearch中,分组查询通常是通过聚合(Aggregation)来实现的。###TermsAggregation(词项聚合) ...
当您提到"ES",我假设您是在谈论Elasticsearch,一种流行的开源搜索和分析引擎。以下是一些常用的Elasti ...
Elasticsearch是一个开源的分布式搜索和分析引擎,它提供了强大的聚合功能,用于分析和汇总数据。示例代码:这些示例代码展示了一些常用 ...