PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Função AVG() no PostgreSQL


No PostgreSQL, o AVG() A função calcula a média (média aritmética) de todos os valores de entrada não nulos e retorna o resultado.

Exemplo


Aqui está um exemplo rápido para demonstrar como funciona:
SELECT AVG(amount) 
FROM payment;

Resultado:
4.2006673312979002

Neste caso, amount é uma coluna no payment tabela.

Para dar um pouco mais de contexto, aqui está um instantâneo da tabela (da pagila banco de dados de exemplo):
+------------+-------------+----------+-----------+--------+----------------------------+
| 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 a amount coluna para a qual calculamos a média.

A tabela contém muito mais linhas, mas isso mostra um exemplo dos valores.

Resultados filtrados


O AVG() A função opera nas linhas retornadas pela consulta. Portanto, se você filtrar os resultados, o resultado de AVG() vai refletir isso.

Vamos filtrar os resultados:
SELECT AVG(amount) 
FROM payment
WHERE customer_id = 271;

Resultado:
3.8233333333333333

Desta vez, obtivemos a média de todos os valores pagos pelo cliente 271.

O DISTINCT Palavra-chave


Você pode usar o DISTINCT palavra-chave com AVG() para calcular apenas valores distintos. Ou seja, se houver valores duplicados, eles serão tratados como um valor.

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

Resultado:
+--------------------+--------------------+
|        All         |      Distinct      |
+--------------------+--------------------+
| 4.2006673312979002 | 6.1447368421052632 |
+--------------------+--------------------+

Nesse caso, há uma diferença muito grande entre os resultados distintos e não distintos. Isso sugere que há muitos valores duplicados nessa coluna.

Para verificar isso, podemos gerar os valores distintos 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)

Portanto, nosso exemplo retornou a média desses valores distintos.