0Pricing
Django Academy · Leçon

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, Value

A 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

  1. aggregate ou annotate
  2. Expressions F pour les mises à jour atomiques
  3. Objets Q pour les filtres complexes
  4. Agrégation conditionnelle avec Case/When
← Retour à Django Academy