Agregação condicional com Case/When
Aplique lógica condicional dentro de uma única consulta
Agregação condicional com Case/When é uma aula grátis de Django Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Django Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Django Academy inclui 4 aulas no total.
Partes desta aula ainda não foram traduzidas e aparecem em inglês.
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. 📊
Perguntas Frequentes
A aula “Agregação condicional com Case/When” é grátis?
Sim — o texto completo de “Agregação condicional com Case/When” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Django Academy, atualize para CoddyKit PRO. O curso de Django Academy inclui 4 aulas no total.
O que vou aprender em “Agregação condicional com Case/When”?
Aplique lógica condicional dentro de uma única consulta Você pratica Django Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Django Academy?
Nenhuma experiência prévia é necessária. Django Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Agregação condicional com Case/When”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Django Academy?
Sim. Cada aula de Django Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- aggregate versus annotate
- Expressões F para atualizações atômicas
- Objetos Q para filtros complexos
- Agregação condicional com Case/When