PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Fonction AVG() dans PostgreSQL

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.