Fonctions d’agrégation spécifiques à PostgreSQL¶
Ces fonctions 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)[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¶ - New in Django 1.11.
Un paramètre booléen facultatif qui détermine si les valeurs concaténées seront distinctes.
Falsepar 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)[source]¶ Renvoie la covariance de population sous forme de nombre
float, ouNonesi aucune ligne ne correspond.Accepte un paramètre facultatif :
-
sample¶ 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.
-
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 <https://fr.wikipedia.org/wiki/Régression_(statistiques)> `_ 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}