Agrégation conditionnelle avec Case/When
Branchez la logique au sein d’une seule requête.
Agrégation conditionnelle avec Case/When est une leçon Django Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Django Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Django Academy comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
Branching Inside a Query
Sometimes you need different results for different rows. Case lets the database choose a value per row, like an if statement in SQL.
The Case and When Pair
A Case holds one or more When branches; each When pairs a condition with the value to use when that condition is true.
from django.db.models import Case, When, ValueA Simple Label
Annotate a computed label by giving each When a condition and a then value, with a default for the rest.
Book.objects.annotate(tier=Case(
When(price__gte=50, then=Value("premium")),
default=Value("standard")))Why Conditional Aggregation
The real power comes from putting Case inside an aggregate, so you can count or sum only the rows that match a condition.
Count Rows That Match
Wrap a Case in Count to tally just the matching rows, since non-matching branches return null and are skipped.
Count(Case(When(active=True, then=1)))The filter= Shortcut
Modern Django offers a cleaner way: pass filter to an aggregate to count or sum a subset without writing Case yourself.
Count("id", filter=Q(active=True))Multiple Buckets at Once
Annotate several conditional aggregates together to build a breakdown, like active and inactive counts in one query.
Team.objects.annotate(
active=Count("member", filter=Q(member__active=True)),
inactive=Count("member", filter=Q(member__active=False)))Sum a Subset
The same trick works with Sum, letting you total only the rows that pass a condition, such as paid invoices.
Sum("amount", filter=Q(status="paid"))Set an output_field
When the value types are not obvious, give Case an output_field so Django knows how to handle the result.
Case(When(...), default=Value(0), output_field=IntegerField())Order by a Case
You can even order_by a Case annotation to create custom sort priorities that plain field ordering cannot express.
One Trip to the Database
All of this branching runs server-side in a single query, far faster than looping in Python and counting by hand.
Quick Check
You want one number: how many members of a team are active, computed in the database.
Recap
Case and When add per-row branching, and pairing conditions with aggregates, or the filter= shortcut, builds rich breakdowns in one query. 📊
Questions Fréquemment Posées
La leçon « Agrégation conditionnelle avec Case/When » est-elle gratuite ?
Oui — le texte complet de « Agrégation conditionnelle avec Case/When » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Django Academy, passe à CoddyKit PRO. Le cours Django Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Agrégation conditionnelle avec Case/When » ?
Branchez la logique au sein d’une seule requête. Tu pratiques Django Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Django Academy ?
Aucune expérience préalable n'est requise. Django Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Agrégation conditionnelle avec Case/When » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Django Academy ?
Oui. Chaque leçon Django Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- aggregate ou annotate
- Expressions F pour les mises à jour atomiques
- Objets Q pour les filtres complexes
- Agrégation conditionnelle avec Case/When