In PostgreSQL, il AVG()
La funzione calcola la media (media aritmetica) di tutti i valori di input non nulli e restituisce il risultato.
Esempio
Ecco un rapido esempio per dimostrare come funziona:
SELECT AVG(amount)
FROM payment;
Risultato:
4.2006673312979002
In questo caso, amount
è una colonna nel payment
tavolo.
Per dare un po' più di contesto, ecco un'istantanea della tabella (dalla pagila
database di esempio):
+------------+-------------+----------+-----------+--------+----------------------------+ | 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 | ...
Possiamo vedere l'amount
colonna per la quale abbiamo calcolato la media.
La tabella contiene molte più righe, ma questo mostra un esempio dei valori.
Risultati filtrati
Il AVG()
La funzione opera sulle righe restituite dalla query. Quindi, se filtri i risultati, il risultato di AVG()
lo rifletterà.
Filtra i risultati:
SELECT AVG(amount)
FROM payment
WHERE customer_id = 271;
Risultato:
3.8233333333333333
Quindi questa volta abbiamo ottenuto la media di tutti gli importi pagati dal cliente 271.
Il DISTINCT
Parola chiave
Puoi usare il DISTINCT
parola chiave con AVG()
calcolare solo valori distinti. Cioè, se sono presenti valori duplicati, vengono trattati come un valore.
Esempio:
SELECT
AVG(amount) AS "All",
AVG(DISTINCT amount) AS "Distinct"
FROM payment;
Risultato:
+--------------------+--------------------+ | All | Distinct | +--------------------+--------------------+ | 4.2006673312979002 | 6.1447368421052632 | +--------------------+--------------------+
In questo caso, c'è una differenza molto grande tra i risultati distinti e non distinti. Ciò suggerisce che ci sono molti valori duplicati in quella colonna.
Per verificarlo, possiamo emettere i valori distinti come questo:
SELECT DISTINCT amount
FROM payment;
Risultato:
+--------+ | 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)
Quindi il nostro esempio ha restituito la media di quei valori distinti.