Fonctions d’agrégation spécifiques à PostgreSQL
New in Django 1.9.
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
-
class
ArrayAgg
(expression, **extra)[source]
Renvoie une liste de valeurs, y compris nulles, concaténées dans un tableau.
BitAnd
-
class
BitAnd
(expression, **extra)[source]
Renvoie un entier int
résultat de l’opération AND
bit-à-bit de toutes les valeurs non nulles, ou None
si toutes les valeurs sont nulles.
BitOr
-
class
BitOr
(expression, **extra)[source]
Renvoie un entier int
résultat de l’opération OR
bit-à-bit de toutes les valeurs non nulles, ou None
si toutes les valeurs sont nulles.
BoolAnd
-
class
BoolAnd
(expression, **extra)[source]
Renvoie True
si toutes les valeurs d’entrée sont vraies, None
si toutes les valeurs sont nulles ou s’il n’y a pas de valeur, sinon renvoie False
.
BoolOr
-
class
BoolOr
(expression, **extra)[source]
Renvoie True
si au moins une valeur d’entrée est vraie, None
si toutes les valeurs sont nulles ou s’il n’y a pas de valeur, sinon renvoie False
.
StringAgg
-
class
StringAgg
(expression, delimiter)[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.
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
-
class
Corr
(y, x)[source]
Renvoie le coefficient de corrélation sous forme de nombre float
, ou None
si aucune ligne ne correspond.
CovarPop
-
class
CovarPop
(y, x, sample=False)[source]
Renvoie la covariance de population sous forme de nombre float
, ou None
si aucune ligne ne correspond.
Accepte un paramètre facultatif :
-
sample
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.
RegrAvgX
-
class
RegrAvgX
(y, x)[source]
Renvoie la moyenne de la variable indépendante (sum(x)/N
) sous forme de nombre float
, ou None
si aucune ligne ne correspond.
RegrAvgY
-
class
RegrAvgY
(y, x)[source]
Returns the average of the dependent variable (sum(y)/N
) as a
float
, or None
if there aren’t any matching rows.
RegrCount
-
class
RegrCount
(y, x)[source]
Renvoie un entier int
correspondant au nombre de lignes d’entrée dans lesquelles les deux expressions ne sont pas nulles.
RegrIntercept
-
class
RegrIntercept
(y, x)[source]
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 None
si aucune ligne ne correspond.
RegrR2
-
class
RegrR2
(y, x)[source]
Returns the square of the correlation coefficient as a float
, or
None
if there aren’t any matching rows.
RegrSlope
-
class
RegrSlope
(y, x)[source]
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 None
si aucune ligne ne correspond.
RegrSXX
-
class
RegrSXX
(y, x)[source]
Renvoie sum(x^2) - sum(x)^2/N
(« somme des carrés » de la variable indépendante) sous forme de nombre float
, ou None
si aucune ligne ne correspond.
RegrSXY
-
class
RegrSXY
(y, x)[source]
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 None
si aucune ligne ne correspond.
RegrSYY
-
class
RegrSYY
(y, x)[source]
Renvoie sum(y^2) - sum(y)^2/N
(« somme des carrés » de la variable dépendante) sous forme de nombre float
, ou None
si aucune ligne ne correspond.
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}