Fonctions d’agrégation spécifiques à PostgreSQL¶
Ces fonctions sont disponibles dans le module django.contrib.postgres.aggregates
. Elles sont décrites plus en détails dans la documentation PostgreSQL.
Note
Toutes ces fonctions n’ont pas d’alias par défaut, il faut donc en indiquer un explicitement. Par exemple :
>>> SomeModel.objects.aggregate(arr=ArrayAgg('somefield'))
{'arr': [0, 1, 2]}
Fonctions d’agrégation d’ordre général¶
ArrayAgg
¶
BitAnd
¶
BitOr
¶
BoolAnd
¶
BoolOr
¶
JSONBAgg
¶
StringAgg
¶
-
class
StringAgg
(expression, delimiter, distinct=False, filter=None)[source]¶ Renvoie les valeurs d’entrée concaténées dans une chaîne, séparées par la chaîne
delimiter
.-
delimiter
¶ Paramètre obligatoire. Doit être une chaîne.
-
distinct
¶ Un paramètre booléen facultatif qui détermine si les valeurs concaténées seront distinctes.
False
par défaut.
-
Fonctions d’agrégation à but statistique¶
y
et x
¶
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.
Corr
¶
CovarPop
¶
-
class
CovarPop
(y, x, sample=False, filter=None)[source]¶ Renvoie la covariance de population sous forme de nombre
float
, ouNone
si aucune ligne ne correspond.Accepte un paramètre facultatif :
-
sample
¶ Par défaut,
CovarPop
renvoie la covariance de population générale. Cependant, sisample=True
, la valeur renvoyée sera la covariance d’échantillon de population.
-
RegrAvgX
¶
RegrAvgY
¶
RegrCount
¶
RegrIntercept
¶
RegrR2
¶
RegrSlope
¶
RegrSXX
¶
RegrSXY
¶
Exemples d’utilisation¶
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}