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.