Django: QuerySet の集計メソッド

Django 4 の実践(データ処理編)

日付:2025年2月19日

Django の QuerySet に含まれる集計メソッドを紹介し、データの統計的な操作方法を解説します。

目 次

はじめに

Django では Count, Avg, Sum, Min, Max などの集計メソッドを使用することで、データの統計的な分析を簡単に行うことができます。
本記事では、Django の QuerySet における 集計メソッドの使い方 を解説し、具体的な活用例を紹介します。

この記事で学べること

  • Django の QuerySet で使用できる集計メソッド
  • annotate()aggregate() の違い
  • 集計メソッドの活用例

1. Django の集計メソッド一覧

Django の django.db.models には、以下のような便利な集計メソッドが用意されています。

メソッド説明
Count()レコードの件数を取得
Avg()平均値を取得
Sum()合計値を取得
Min()最小値を取得
Max()最大値を取得

2. Count(): データの件数を取得

特定のフィールドに基づいて、グループ化して件数を数えることができます。

PYTHON
from django.db.models import Count from myapp.models import Article # 記事ごとの著者の数を取得 articles = Article.objects.annotate(num_authors=Count('author')) for article in articles: print(article.title, article.num_authors)

3. Avg(): 平均値を取得

Avg() を使用すると、特定のフィールドの平均値を計算できます。

PYTHON
from django.db.models import Avg # 記事の平均単語数を取得 average_word_count = Article.objects.aggregate(Avg('word_count')) print(average_word_count['word_count__avg'])

4. Sum(): 合計値を取得

全レコードの合計値を計算するには Sum() を使用します。

PYTHON
from django.db.models import Sum # 記事の総単語数を取得 word_count_sum = Article.objects.aggregate(Sum('word_count')) print(word_count_sum['word_count__sum'])

5. Min(), Max(): 最小値・最大値を取得

それぞれ Min()Max() を使用して、特定のフィールドの最小値と最大値を取得できます。

PYTHON
from django.db.models import Min, Max # 記事の最小・最大の単語数を取得 word_count_min_max = Article.objects.aggregate(Min('word_count'), Max('word_count')) print("最小単語数:", word_count_min_max['word_count__min']) print("最大単語数:", word_count_min_max['word_count__max'])

6. annotate() と aggregate() の違い

  • annotate(): 各オブジェクトに対して計算結果を追加する。
  • aggregate(): 全体の統計情報を取得する。

例:

PYTHON
# 各記事ごとのコメント数を取得 (annotate) articles = Article.objects.annotate(comment_count=Count('comments')) # 記事全体の平均単語数を取得 (aggregate) avg_words = Article.objects.aggregate(Avg('word_count'))

7. まとめ

Django の QuerySet には、データを集計・統計処理する便利なメソッドが用意されています。

メソッド説明
Count()レコードの件数を取得
Avg()平均値を取得
Sum()合計値を取得
Min()最小値を取得
Max()最大値を取得
annotate()各オブジェクトに集計データを追加
aggregate()全データの統計情報を取得

これらのメソッドを適切に活用することで、より高度なデータ操作が可能になります。