Django Academy · Lektion

aggregate kontra annotate

Sammanfatta hela querysets eller rad för rad

Lektion 1 av 413 steg

aggregate kontra annotate är en gratis lektion i Django Academy på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Django Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Django Academy innehåller totalt 4 lektioner.

Två sätt att sammanfatta

ORM:et ger Er två verktyg för sammanfattning: aggregate slår ihop en hel queryset till ett resultat, medan annotate lägger till ett värde på varje rad.

Vad aggregate returnerar

Om Ni anropar aggregate avslutas frågan och Ni får en vanlig Python-dictionary, inte en queryset. Därför finns det inget kvar att filtrera efteråt.

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

Namnge ert resultat

Skicka ett nyckelordsargument till aggregate för att själv namnge resultatnyckeln. Det blir betydligt tydligare än den automatiskt skapade etiketten price__avg.

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

Vanliga aggregate-funktioner

Ni får den vanliga SQL-verktygslådan: Count, Sum, Avg, Min och Max. Var och en reducerar hela queryseten till ett enda tal.

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

Vad annotate returnerar

Till skillnad från detta returnerar annotate en queryset där varje objekt har ett nytt beräknat attribut, så att Ni kan fortsätta filtrera och ordna.

Antal per rad

Använd annotate tillsammans med ett relaterat antal för att besvara frågor per objekt, till exempel hur många böcker varje författare har skrivit.

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

GROUP BY sker automatiskt

När Ni använder annotate över en relation lägger Django automatiskt till GROUP BY-satsen och grupperar efter modellen som Ni utgick från.

Filtrera på en annotering

Eftersom annotate behåller en queryset kan Ni filter på det nya värdet, till exempel för att hitta författare med fler än fem böcker.

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

Ordna efter en annotering

Ni kan också använda order_by på ett beräknat värde, så att rangordna era mest produktiva författare blir en fråga på en enda rad.

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

Filtrera innan Ni annoterar

Ordningen spelar roll: ett filter före annotate begränsar vilka rader som räknas, medan ett filter efteråt testar det beräknade resultatet.

Välj rätt verktyg

Ställ en fråga: vill Ni ha en enskild sammanfattning för hela mängden, eller ett värde per objekt? Det valet avgör aggregate kontra annotate.

Snabb kontroll

Ni vill ha varje författares bokantal, bevarat som en queryset som Ni fortfarande kan sortera. Vilket anrop passar?

Sammanfattning

Kom ihåg skillnaden: aggregate returnerar en enda sammanfattande dict och avslutar frågan, medan annotate lägger till ett värde per rad och behåller en queryset som Ni kan filtrera och sortera. 🎯

Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”aggregate kontra annotate” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Django Academy, inklusive ”aggregate kontra annotate”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Django Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”aggregate kontra annotate”?

Sammanfatta hela querysets eller rad för rad Ni övar på Django Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Django Academy?

Du behöver inga förkunskaper. Utbildningen i Django Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”aggregate kontra annotate”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Django Academy-lektionen?

Ja. Varje Django Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. aggregate kontra annotate
  2. F-uttryck för atomära uppdateringar
  3. Q-objekt för komplex filtrering
  4. Villkorsstyrd aggregering med Case/When
← Tillbaka till Django Academy