Dans PostgreSQL, le AVG()
calcule la moyenne (moyenne arithmétique) de toutes les valeurs d'entrée non nulles et renvoie le résultat.
Exemple
Voici un exemple rapide pour montrer comment cela fonctionne :
SELECT AVG(amount)
FROM payment;
Résultat :
4.2006673312979002
Dans ce cas, amount
est une colonne dans le payment
table.
Pour donner un peu plus de contexte, voici un instantané du tableau (de la pagila
exemple de base de données) :
+------------+-------------+----------+-----------+--------+----------------------------+ | payment_id | customer_id | staff_id | rental_id | amount | payment_date | +------------+-------------+----------+-----------+--------+----------------------------+ | 16050 | 269 | 2 | 7 | 1.99 | 2017-01-24 21:40:19.996577 | | 16051 | 269 | 1 | 98 | 0.99 | 2017-01-25 15:16:50.996577 | | 16052 | 269 | 2 | 678 | 6.99 | 2017-01-28 21:44:14.996577 | | 16053 | 269 | 2 | 703 | 0.99 | 2017-01-29 00:58:02.996577 | | 16054 | 269 | 1 | 750 | 4.99 | 2017-01-29 08:10:06.996577 | | 16055 | 269 | 2 | 1099 | 2.99 | 2017-01-31 12:23:14.996577 | | 16056 | 270 | 1 | 193 | 1.99 | 2017-01-26 05:10:14.996577 | | 16057 | 270 | 1 | 1040 | 4.99 | 2017-01-31 04:03:42.996577 | | 16058 | 271 | 1 | 1096 | 8.99 | 2017-01-31 11:59:15.996577 | ...
Nous pouvons voir le amount
colonne pour laquelle nous avons calculé la moyenne.
Le tableau contient beaucoup plus de lignes, mais cela vous montre un exemple des valeurs.
Résultats filtrés
Le AVG()
La fonction opère sur les lignes renvoyées par la requête. Donc, si vous filtrez les résultats, le résultat de AVG()
reflétera cela.
Filtrons les résultats :
SELECT AVG(amount)
FROM payment
WHERE customer_id = 271;
Résultat :
3.8233333333333333
Donc, cette fois, nous avons obtenu la moyenne de tous les montants payés par le client 271.
Le DISTINCT
Mot clé
Vous pouvez utiliser le DISTINCT
mot-clé avec AVG()
pour ne calculer que des valeurs distinctes. Autrement dit, s'il existe des valeurs en double, elles sont traitées comme une seule valeur.
Exemple :
SELECT
AVG(amount) AS "All",
AVG(DISTINCT amount) AS "Distinct"
FROM payment;
Résultat :
+--------------------+--------------------+ | All | Distinct | +--------------------+--------------------+ | 4.2006673312979002 | 6.1447368421052632 | +--------------------+--------------------+
Dans ce cas, il y a une très grande différence entre les résultats distincts et non distincts. Cela suggère qu'il y a beaucoup de valeurs en double dans cette colonne.
Pour vérifier cela, nous pouvons afficher les valeurs distinctes comme ceci :
SELECT DISTINCT amount
FROM payment;
Résultat :
+--------+ | amount | +--------+ | 1.99 | | 3.98 | | 7.99 | | 5.99 | | 10.99 | | 2.99 | | 8.97 | | 8.99 | | 3.99 | | 9.98 | | 11.99 | | 7.98 | | 6.99 | | 0.00 | | 4.99 | | 5.98 | | 0.99 | | 1.98 | | 9.99 | +--------+ (19 rows)
Notre exemple a donc renvoyé la moyenne de ces valeurs distinctes.