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, ordering=(), **extra)Lien vers cette définition

Renvoie une liste de valeurs, y compris nulles, concaténées dans un tableau, ou default s’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. False par défaut.

orderingLien 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 :

Code
'some_field'
'-some_field'
from django.db.models import F
F('some_field').desc()

BitAndLien vers cette rubrique

class BitAnd(expression, filter=None, default=None, **extra)Lien vers cette définition

Renvoie un entier int résultat de l’opération AND bit-à-bit de toutes les valeurs non nulles, ou default si 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 int résultat de l’opération OR bit-à-bit de toutes les valeurs non nulles, ou default si toutes les valeurs sont nulles.

BoolAndLien vers cette rubrique

class BoolAnd(expression, filter=None, default=None, **extra)Lien vers cette définition

Renvoie True si toutes les valeurs d’entrée sont vraies, default si toutes les valeurs sont nulles ou s’il n’y a pas de valeur, sinon renvoie False.

Exemple d’utilisation :

Code
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 True si au moins une valeur d’entrée est vraie, default si toutes les valeurs sont nulles ou s’il n’y a pas de valeur, sinon renvoie False.

Exemple d’utilisation :

Code
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, ordering=(), **extra)Lien vers cette définition

Renvoie les valeurs d’entrée sous forme de tableau JSON, ou default s’il n’y a aucune valeur. Vous pouvez interroger le résultat en utilisant les expressions 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. False par défaut.

orderingLien 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.ordering.

Exemple d’utilisation :

Code
class Room(models.Model):
    number = models.IntegerField(unique=True)

class HotelReservation(model.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',
...         ordering='-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, ordering=())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, ou default s’il n’y a aucune valeur.

delimiterLien vers cette définition

Paramètre obligatoire. Doit être une chaîne.

distinctLien vers cette définition

Un paramètre booléen facultatif qui détermine si les valeurs concaténées seront distinctes. False par défaut.

orderingLien 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.ordering.

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, ou default si 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, ou default si aucune ligne ne correspond.

Accepte un paramètre facultatif :

sampleLien vers cette définition

Par défaut, CovarPop renvoie la covariance de population générale. Cependant, si sample=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 nombre float, ou default si 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 nombre float, ou default si aucune ligne ne correspond.

RegrCountLien vers cette rubrique

class RegrCount(y, x, filter=None)Lien vers cette définition

Renvoie un entier int correspondant 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 nombre float, ou default si 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, or default if 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 nombre float, ou default si 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 nombre float, ou default si 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 nombre float, ou default si 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 nombre float, ou default si aucune ligne ne correspond.

Exemples d’utilisationLien vers cette rubrique

Nous allons utiliser cette table d’exemple :

Code
| 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 :

Code
>>> 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) :

Code
>>> 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}