如何使用 Django ORM 进行聚合查询?

推荐答案

在 Django 中,使用 ORM 进行聚合查询可以通过 annotate()aggregate() 方法来实现。annotate() 用于对查询集中的每个对象进行注释,而 aggregate() 用于对整个查询集进行聚合计算。

使用 annotate() 进行分组聚合

使用 aggregate() 进行整体聚合

本题详细解读

1. annotate() 方法

annotate() 方法用于对查询集中的每个对象进行注释。它通常与聚合函数(如 CountSumAvg 等)一起使用,以便为每个对象添加一个或多个聚合值。

  • 示例:统计每个作者的书籍数量。在这个例子中,annotate() 方法为每个 Author 对象添加了一个 book_count 字段,表示该作者所写的书籍数量。

2. aggregate() 方法

aggregate() 方法用于对整个查询集进行聚合计算。它返回一个字典,包含一个或多个聚合值。

  • 示例:计算所有书籍的平均价格。在这个例子中,aggregate() 方法计算了所有 Book 对象的 price 字段的平均值,并将结果存储在 average_price 字典中。

3. 常用的聚合函数

  • Count:计算数量。
  • Sum:计算总和。
  • Avg:计算平均值。
  • Max:计算最大值。
  • Min:计算最小值。

4. 组合使用 annotate()aggregate()

在某些情况下,你可能需要同时使用 annotate()aggregate()。例如,你可能想要先对查询集进行分组注释,然后再对整个查询集进行聚合计算。

在这个例子中,annotate() 方法首先为每个作者添加了 book_count 字段,然后 aggregate() 方法计算了所有作者中书籍数量的最大值。

纠错
反馈