Fonctions d’agrégation spécifiques à PostgreSQLLien vers cette rubrique
Ces fonctions sont disponibles dans le module django.contrib.postgres.aggregates. Elles sont décrites plus en détails dans la documentation PostgreSQL.
Fonctions d’agrégation d’ordre généralLien vers cette rubrique
ArrayAggLien vers cette rubrique
- class ArrayAgg(expression, distinct=False, filter=None, default=None, order_by=(), **extra)Lien vers cette définition
Renvoie une liste de valeurs, y compris nulles, concaténées dans un tableau, ou
defaults’il n’y a aucune valeur.- distinctLien vers cette définition
Un paramètre booléen facultatif qui détermine si les valeurs de tableau seront distinctes.
Falsepar défaut.
- order_byLien vers cette définition
-
Une chaîne facultative d’un nom de champ (précédé d’un préfixe
"-"facultatif pour indiquer un ordre décroissant) ou une expression (ou un tuple/liste de chaînes ou d’expressions) qui indique le tri des éléments de la liste résultante.Exemples :
from django.db.models import F ArrayAgg("a_field", order_by="-some_field") ArrayAgg("a_field", order_by=F("some_field").desc())
BitAndLien vers cette rubrique
- class BitAnd(expression, filter=None, default=None, **extra)Lien vers cette définition
Renvoie un entier
intrésultat de l’opérationANDbit-à-bit de toutes les valeurs non nulles, oudefaultsi toutes les valeurs sont nulles.
BitOrLien vers cette rubrique
- class BitOr(expression, filter=None, default=None, **extra)Lien vers cette définition
Renvoie un entier
intrésultat de l’opérationORbit-à-bit de toutes les valeurs non nulles, oudefaultsi toutes les valeurs sont nulles.
BitXorLien vers cette rubrique
- class BitXor(expression, filter=None, default=None, **extra)Lien vers cette définition
Renvoie un entier
intrésultat de l’opérationXORbit-à-bit de toutes les valeurs non nulles, oudefaultsi toutes les valeurs sont nulles. Nécessite PostgreSQL 14+.
BoolAndLien vers cette rubrique
- class BoolAnd(expression, filter=None, default=None, **extra)Lien vers cette définition
Renvoie
Truesi toutes les valeurs d’entrée sont vraies,defaultsi toutes les valeurs sont nulles ou s’il n’y a pas de valeur, sinon renvoieFalse.Exemple d’utilisation :
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}
BoolOrLien vers cette rubrique
- class BoolOr(expression, filter=None, default=None, **extra)Lien vers cette définition
Renvoie
Truesi au moins une valeur d’entrée est vraie,defaultsi toutes les valeurs sont nulles ou s’il n’y a pas de valeur, sinon renvoieFalse.Exemple d’utilisation :
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}
JSONBAggLien vers cette rubrique
- class JSONBAgg(expressions, distinct=False, filter=None, default=None, order_by=(), **extra)Lien vers cette définition
Renvoie les valeurs d’entrée sous forme de tableau
JSON, oudefaults’il n’y a aucune valeur. Vous pouvez interroger le résultat en utilisant lesexpressions de clé et d'indice.- distinctLien vers cette définition
Un paramètre booléen facultatif qui détermine si les valeurs de tableau seront distinctes.
Falsepar défaut.
- order_byLien vers cette définition
-
Une chaîne facultative d’un nom de champ (précédé d’un préfixe
"-"facultatif pour indiquer un ordre décroissant) ou une expression (ou un tuple/liste de chaînes ou d’expressions) qui indique le tri des éléments de la liste résultante.Les exemples sont les mêmes que pour
ArrayAgg.order_by.
Exemple d’utilisation :
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} ]}]>
StringAggLien vers cette rubrique
- class StringAgg(expression, delimiter, distinct=False, filter=None, default=None, order_by=())Lien vers cette définition
-
Renvoie les valeurs d’entrée concaténées dans une chaîne, séparées par la chaîne
delimiter, oudefaults’il n’y a aucune valeur.- delimiterLien vers cette définition
Argument obligatoire. Une chaîne, class:~django.db.models.Value ou expression représentant la chaîne pour des valeurs de séparation. Par exemple,
Value(",").
- distinctLien vers cette définition
Un paramètre booléen facultatif qui détermine si les valeurs concaténées seront distinctes.
Falsepar défaut.
- order_byLien vers cette définition
-
Une chaîne facultative d’un nom de champ (précédé d’un préfixe
"-"facultatif pour indiquer un ordre décroissant) ou une expression (ou un tuple/liste de chaînes ou d’expressions) qui indique le tri des éléments de la chaîne résultante.Les exemples sont les mêmes que pour
ArrayAgg.order_by.
Exemple d’utilisation :
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' }]>
Fonctions d’agrégation à but statistiqueLien vers cette rubrique
y et xLien vers cette rubrique
Les paramètres y et x de toutes ces fonctions peuvent être un nom de champ ou une expression renvoyant une donnée numérique. Les deux sont obligatoires.
CorrLien vers cette rubrique
- class Corr(y, x, filter=None, default=None)Lien vers cette définition
Renvoie le coefficient de corrélation sous forme de nombre
float, oudefaultsi aucune ligne ne correspond.
CovarPopLien vers cette rubrique
- class CovarPop(y, x, sample=False, filter=None, default=None)Lien vers cette définition
Renvoie la covariance de population sous forme de nombre
float, oudefaultsi aucune ligne ne correspond.- sampleLien vers cette définition
Facultatif. Par défaut,
CovarPoprenvoie la covariance de population générale. Cependant, sisample=True, la valeur renvoyée sera la covariance d’échantillon de population.
RegrAvgXLien vers cette rubrique
- class RegrAvgX(y, x, filter=None, default=None)Lien vers cette définition
Renvoie la moyenne de la variable indépendante (
sum(x)/N) sous forme de nombrefloat, oudefaultsi aucune ligne ne correspond.
RegrAvgYLien vers cette rubrique
- class RegrAvgY(y, x, filter=None, default=None)Lien vers cette définition
Renvoie la moyenne de la variable dépendante (
sum(y)/N) sous forme de nombrefloat, oudefaultsi aucune ligne ne correspond.
RegrCountLien vers cette rubrique
- class RegrCount(y, x, filter=None)Lien vers cette définition
Renvoie un entier
intcorrespondant au nombre de lignes d’entrée dans lesquelles les deux expressions ne sont pas nulles.
RegrInterceptLien vers cette rubrique
- class RegrIntercept(y, x, filter=None, default=None)Lien vers cette définition
Renvoie l’interception de l’axe y pour l’équation linéaire de la méthode des moindres carrés déterminée par les paires
(x, y)sous forme de nombrefloat, oudefaultsi aucune ligne ne correspond.
RegrR2Lien vers cette rubrique
- class RegrR2(y, x, filter=None, default=None)Lien vers cette définition
Returns the square of the correlation coefficient as a
float, ordefaultif there aren’t any matching rows.
RegrSlopeLien vers cette rubrique
- class RegrSlope(y, x, filter=None, default=None)Lien vers cette définition
Renvoie l’inclinaison pour l’équation linéaire de la méthode des moindres carrés déterminée par les paires
(x, y)sous forme de nombrefloat, oudefaultsi aucune ligne ne correspond.
RegrSXXLien vers cette rubrique
- class RegrSXX(y, x, filter=None, default=None)Lien vers cette définition
Renvoie
sum(x^2) - sum(x)^2/N(« somme des carrés » de la variable indépendante) sous forme de nombrefloat, oudefaultsi aucune ligne ne correspond.
RegrSXYLien vers cette rubrique
- class RegrSXY(y, x, filter=None, default=None)Lien vers cette définition
Renvoie
sum(x*y) - sum(x) * sum(y)/N(« somme des produits » de la variable indépendante multipliée par la variable dépendante) sous forme de nombrefloat, oudefaultsi aucune ligne ne correspond.
RegrSYYLien vers cette rubrique
- class RegrSYY(y, x, filter=None, default=None)Lien vers cette définition
Renvoie
sum(y^2) - sum(y)^2/N(« somme des carrés » de la variable dépendante) sous forme de nombrefloat, oudefaultsi aucune ligne ne correspond.
Exemples d’utilisationLien vers cette rubrique
Nous allons utiliser cette table d’exemple :
| FIELD1 | FIELD2 | FIELD3 |
|--------|--------|--------|
| foo | 1 | 13 |
| bar | 2 | (null) |
| test | 3 | 13 |
Voici quelques exemples de certaines des fonctions d’agrégation d’ordre général :
>>> 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']}
L’exemple suivant montre l’utilisation des fonctions d’agrégats pour les statistiques. Les mathématiques sous-jacentes ne sont pas expliquées (vous pouvez vous renseigner à ce sujet sur Wikipédia par exemple) :
>>> 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}