PostgreSQL-specifika aggregeringsfunktionerLink to this heading
Dessa funktioner är tillgängliga från modulen django.contrib.postgres.aggregates. De beskrivs mer detaljerat i PostgreSQL-dokumenten.
Aggregeringsfunktioner för allmänt brukLink to this heading
ArrayAggLink to this heading
- class ArrayAgg(expression, distinct=False, filter=None, default=None, order_by=(), **extra)Link to this definition
Returnerar en lista med värden, inklusive nollvärden, sammanlänkade till en array, eller
defaultom det inte finns några värden.- distinctLink to this definition
Ett valfritt booleskt argument som avgör om matrisvärdena ska vara distinkta. Standardvärdet är
False.
- order_byLink to this definition
-
En valfri sträng med ett fältnamn (med ett valfritt prefix
"-"som anger fallande ordning) eller ett uttryck (eller en tupel eller en lista med strängar och/eller uttryck) som anger ordningen på elementen i resultatlistan.Exempel:
from django.db.models import F ArrayAgg("a_field", order_by="-some_field") ArrayAgg("a_field", order_by=F("some_field").desc())
Bit ochLink to this heading
- class BitAnd(expression, filter=None, default=None, **extra)Link to this definition
Returnerar ett
intav bitvisANDav alla icke-null värden, ellerdefaultom alla värden är null.
BitOrLink to this heading
- class BitOr(expression, filter=None, default=None, **extra)Link to this definition
Returnerar ett
intav det bitvisaORav alla icke-null indatavärden, ellerdefaultom alla värden är null.
BitXorLink to this heading
- class BitXor(expression, filter=None, default=None, **extra)Link to this definition
Returnerar en
intav den bitvisaXORav alla icke-null-ingångsvärden, ellerdefaultom alla värden är null. Det kräver PostgreSQL 14+.
BoolAndLink to this heading
- class BoolAnd(expression, filter=None, default=None, **extra)Link to this definition
Returnerar
True, om alla indatavärden är sanna,defaultom alla värden är null eller om det inte finns några värden, annarsFalse.Exempel på användning:
class Comment(models.Model): body = models.TextField() published = models.BooleanField() rank = models.IntegerField()>>> from django.db.models import Q >>> from django.contrib.postgres.aggregates import BoolAnd >>> Comment.objects.aggregate(booland=BoolAnd("published")) {'booland': False} >>> Comment.objects.aggregate(booland=BoolAnd(Q(rank__lt=100))) {'booland': True}
BoolOrLink to this heading
- class BoolOr(expression, filter=None, default=None, **extra)Link to this definition
Returnerar
Trueom minst ett inmatningsvärde är sant,defaultom alla värden är null eller om det inte finns några värden, annarsFalse.Exempel på användning:
class Comment(models.Model): body = models.TextField() published = models.BooleanField() rank = models.IntegerField()>>> from django.db.models import Q >>> from django.contrib.postgres.aggregates import BoolOr >>> Comment.objects.aggregate(boolor=BoolOr("published")) {'boolor': True} >>> Comment.objects.aggregate(boolor=BoolOr(Q(rank__gt=2))) {'boolor': False}
JSONBAggLink to this heading
- class JSONBAgg(expressions, distinct=False, filter=None, default=None, order_by=(), **extra)Link to this definition
Returnerar indatavärdena som en
JSON-array, ellerdefaultom det inte finns några värden. Du kan fråga efter resultatet med hjälp avnyckel- och indexuppslagningar.- distinctLink to this definition
Ett valfritt booleskt argument som avgör om matrisvärdena ska vara distinkta. Standardvärdet är
False.
- order_byLink to this definition
-
En valfri sträng med ett fältnamn (med ett valfritt prefix
"-"som anger fallande ordning) eller ett uttryck (eller en tupel eller en lista med strängar och/eller uttryck) som anger ordningen på elementen i resultatlistan.Exemplen är desamma som för
ArrayAgg.order_by.
Exempel på användning:
class Room(models.Model): number = models.IntegerField(unique=True) class HotelReservation(models.Model): room = models.ForeignKey("Room", on_delete=models.CASCADE) start = models.DateTimeField() end = models.DateTimeField() requirements = models.JSONField(blank=True, null=True)>>> from django.contrib.postgres.aggregates import JSONBAgg >>> Room.objects.annotate( ... requirements=JSONBAgg( ... "hotelreservation__requirements", ... order_by="-hotelreservation__start", ... ) ... ).filter(requirements__0__sea_view=True).values("number", "requirements") <QuerySet [{'number': 102, 'requirements': [ {'parking': False, 'sea_view': True, 'double_bed': False}, {'parking': True, 'double_bed': True} ]}]>
StringAggLink to this heading
- class StringAgg(expression, delimiter, distinct=False, filter=None, default=None, order_by=())Link to this definition
Returnerar indatavärdena sammankopplade till en sträng, åtskilda av strängen
delimiterellerdefaultom det inte finns några värden.- delimiterLink to this definition
Obligatoriskt argument. Måste vara en sträng.
- distinctLink to this definition
Ett valfritt booleanskt argument som avgör om sammanlänkade värden ska vara distinkta. Standardvärdet är
False.
- order_byLink to this definition
-
En valfri sträng med ett fältnamn (med ett valfritt prefix
"-"som anger fallande ordning) eller ett uttryck (eller en tupel eller en lista med strängar och/eller uttryck) som anger ordningen på elementen i resultatsträngen.Exemplen är desamma som för
ArrayAgg.order_by.
Exempel på användning:
class Publication(models.Model): title = models.CharField(max_length=30) class Article(models.Model): headline = models.CharField(max_length=100) publications = models.ManyToManyField(Publication)>>> article = Article.objects.create(headline="NASA uses Python") >>> article.publications.create(title="The Python Journal") <Publication: Publication object (1)> >>> article.publications.create(title="Science News") <Publication: Publication object (2)> >>> from django.contrib.postgres.aggregates import StringAgg >>> Article.objects.annotate( ... publication_names=StringAgg( ... "publications__title", ... delimiter=", ", ... order_by="publications__title", ... ) ... ).values("headline", "publication_names") <QuerySet [{ 'headline': 'NASA uses Python', 'publication_names': 'Science News, The Python Journal' }]>
Aggregerade funktioner för statistikLink to this heading
y och xLink to this heading
Argumenten y och x för alla dessa funktioner kan vara namnet på ett fält eller ett uttryck som returnerar numeriska data. Båda är obligatoriska.
CorrLink to this heading
- class Corr(y, x, filter=None, default=None)Link to this definition
Returnerar korrelationskoefficienten som en
flata, ellerstandardom det inte finns några matchande rader.
CovarPopLink to this heading
- class CovarPop(y, x, sample=False, filter=None, default=None)Link to this definition
Returnerar populationens kovarians som en
flata, ellerstandardom det inte finns några matchande rader.- sampleLink to this definition
Valfritt. Som standard returnerar
CovarPopden allmänna populationens kovarians. Men omsample=True, kommer returvärdet att vara urvalspopulationens kovarians.
RegrAvgXLink to this heading
- class RegrAvgX(y, x, filter=None, default=None)Link to this definition
Returnerar medelvärdet av den oberoende variabeln (
sum(x)/N) som enflata, ellerstandardom det inte finns några matchande rader.
RegrAvgYLink to this heading
- class RegrAvgY(y, x, filter=None, default=None)Link to this definition
Returnerar medelvärdet av den beroende variabeln (
sum(y)/N) som enflata, ellerstandardom det inte finns några matchande rader.
RegrCountLink to this heading
- class RegrCount(y, x, filter=None)Link to this definition
Returnerar ett
intav antalet indatarader där båda uttrycken inte är null.
RegrInterceptLink to this heading
- class RegrIntercept(y, x, filter=None, default=None)Link to this definition
Returnerar y-interceptet för den linjära ekvationen med minsta kvadratanpassning som bestäms av paren
(x, y)som enfloat, ellerdefaultom det inte finns några matchande rader.
RegrR2Link to this heading
- class RegrR2(y, x, filter=None, default=None)Link to this definition
Returnerar kvadraten på korrelationskoefficienten som en
float, ellerdefaultom det inte finns några matchande rader.
RegrSlopeLink to this heading
- class RegrSlope(y, x, filter=None, default=None)Link to this definition
Returnerar lutningen för den linjära ekvationen med minsta kvadratanpassning som bestäms av paren
(x, y)som enflata, ellerdefaultom det inte finns några matchande rader.
RegrSXXLink to this heading
- class RegrSXX(y, x, filter=None, default=None)Link to this definition
Returnerar
sum(x^2) - sum(x)^2/N(”kvadratsumman” för den oberoende variabeln) som enfloat, ellerdefaultom det inte finns några matchande rader.
RegrSXYLink to this heading
- class RegrSXY(y, x, filter=None, default=None)Link to this definition
Returnerar
sum(x*y) - sum(x) * sum(y)/N(”summan av produkter” av oberoende gånger beroende variabel) som enfloat, ellerdefaultom det inte finns några matchande rader.
RegrSYYLink to this heading
- class RegrSYY(y, x, filter=None, default=None)Link to this definition
Returnerar
sum(y^2) - sum(y)^2/N(”kvadratsumman” för den beroende variabeln) som enfloat, ellerdefaultom det inte finns några matchande rader.
Exempel på användningLink to this heading
Vi kommer att använda denna exempeltabell:
| FIELD1 | FIELD2 | FIELD3 |
|--------|--------|--------|
| foo | 1 | 13 |
| bar | 2 | (null) |
| test | 3 | 13 |
Här följer några exempel på några av de allmänna aggregeringsfunktionerna:
>>> TestModel.objects.aggregate(result=StringAgg("field1", delimiter=";"))
{'result': 'foo;bar;test'}
>>> TestModel.objects.aggregate(result=ArrayAgg("field2"))
{'result': [1, 2, 3]}
>>> TestModel.objects.aggregate(result=ArrayAgg("field1"))
{'result': ['foo', 'bar', 'test']}
Nästa exempel visar användningen av statistiska aggregatfunktioner. Den underliggande matematiken kommer inte att beskrivas (du kan läsa om detta, till exempel på wikipedia):
>>> TestModel.objects.aggregate(count=RegrCount(y="field3", x="field2"))
{'count': 2}
>>> TestModel.objects.aggregate(
... avgx=RegrAvgX(y="field3", x="field2"), avgy=RegrAvgY(y="field3", x="field2")
... )
{'avgx': 2, 'avgy': 13}