sql >> Base de Datos >  >> RDS >> PostgreSQL

Función AVG() en PostgreSQL

En PostgreSQL, el AVG() La función calcula el promedio (media aritmética) de todos los valores de entrada no nulos y devuelve el resultado.

Ejemplo

Aquí hay un ejemplo rápido para demostrar cómo funciona:

SELECT AVG(amount) 
FROM payment;

Resultado:

4.2006673312979002

En este caso, amount es una columna en el payment mesa.

Para darle a esto un poco más de contexto, aquí hay una instantánea de la tabla (de la pagila base de datos de ejemplo):

+------------+-------------+----------+-----------+--------+----------------------------+
| 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 |
...

Podemos ver el amount columna para la que calculamos el promedio.

La tabla contiene muchas más filas, pero esto le muestra un ejemplo de los valores.

Resultados filtrados

El AVG() opera en las filas devueltas por la consulta. Entonces, si filtra los resultados, el resultado de AVG() reflejará eso.

Filtremos los resultados:

SELECT AVG(amount) 
FROM payment
WHERE customer_id = 271;

Resultado:

3.8233333333333333

Así que esta vez obtuvimos el promedio de todas las cantidades pagadas por el cliente 271.

El DISTINCT Palabra clave

Puedes usar el DISTINCT palabra clave con AVG() para calcular sólo valores distintos. Es decir, si hay valores duplicados, se tratan como un solo valor.

Ejemplo:

SELECT 
    AVG(amount) AS "All",
    AVG(DISTINCT amount) AS "Distinct"
FROM payment;

Resultado:

+--------------------+--------------------+
|        All         |      Distinct      |
+--------------------+--------------------+
| 4.2006673312979002 | 6.1447368421052632 |
+--------------------+--------------------+

En este caso, hay una diferencia muy grande entre los resultados distintos y no distintos. Esto sugiere que hay muchos valores duplicados en esa columna.

Para verificar esto, podemos generar los distintos valores como este:

SELECT DISTINCT amount
FROM payment;

Resultado:

+--------+
| 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)

Así que nuestro ejemplo devolvió el promedio de esos valores distintos.