0Pricing
Django Academy · レッスン

aggregateとannotate

queryset全体または行ごとに集計します

「aggregateとannotate」はCoddyKit上の無料Django Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDjango Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Django Academyコースには全4レッスンが含まれています。

このレッスンの一部はまだ翻訳されておらず、英語で表示されています。

Two Ways to Summarize

The ORM gives you two summary tools: aggregate collapses a whole queryset into one result, while annotate adds a value to each row.

What aggregate Returns

Calling aggregate ends the query and hands you a plain Python dictionary, not a queryset, so there is nothing left to filter afterward.

from django.db.models import Avg
Book.objects.aggregate(Avg("price"))
# {"price__avg": 24.5}

Naming Your Result

Pass a keyword to aggregate to name the output key yourself, which reads far better than the auto-generated price__avg label.

Book.objects.aggregate(avg_price=Avg("price"))
# {"avg_price": 24.5}

Common Aggregate Functions

You get the usual SQL toolkit: Count, Sum, Avg, Min, and Max. Each one rolls the whole queryset down to a single number.

from django.db.models import Count, Sum
Book.objects.aggregate(total=Count("id"), revenue=Sum("price"))

What annotate Returns

By contrast, annotate returns a queryset where every object carries a new computed attribute, so you can keep filtering and ordering.

Per-Row Counts

Use annotate with a related count to answer per-object questions, like how many books each author has written.

Author.objects.annotate(num_books=Count("book"))
# each author now has .num_books

Group By Happens for You

When you annotate over a relation, Django adds the GROUP BY clause automatically, grouping by the model you started from.

Filter on an Annotation

Because annotate keeps a queryset, you can filter on the new value, for example to find authors with more than five books.

Author.objects.annotate(n=Count("book")).filter(n__gt=5)

Order by an Annotation

You can also order_by a computed value, so ranking your busiest authors is a one-line query.

Author.objects.annotate(n=Count("book")).order_by("-n")

Filter Before You Annotate

Order matters: a filter before annotate narrows which rows get counted, while a filter after it tests the computed result.

Pick the Right Tool

Ask one question: do you want a single summary for the whole set, or one value per object? That choice decides aggregate versus annotate.

Quick Check

You want each author's book count, kept as a queryset you can still order. Which call fits?

Recap

Remember the split: aggregate returns one summary dict and ends the query, while annotate adds a value per row and keeps a queryset you can filter and order. 🎯

よくある質問

「aggregateとannotate」レッスンは無料ですか?

はい。「aggregateとannotate」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Django Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Django Academyコースには全4レッスンが含まれています。

「aggregateとannotate」で何を学びますか?

queryset全体または行ごとに集計します ブラウザで直接実行するハンズオンコードでDjango Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Django Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDjango Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「aggregateとannotate」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDjango Academyレッスンでコードを書いて実行できますか?

はい。すべてのDjango Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. aggregateとannotate
  2. Atomic UpdateのためのF Expressions
  3. 複雑なフィルターのためのQ Objects
  4. Case/Whenによる条件付き集計
← Django Academyに戻る