V PostgreSQL je to AVG()
funkce vypočítá průměr (aritmetický průměr) všech nenulových vstupních hodnot a vrátí výsledek.
Příklad
Zde je rychlý příklad demonstrující, jak to funguje:
SELECT AVG(amount)
FROM payment;
Výsledek:
4.2006673312979002
V tomto případě amount
je sloupec v payment
stůl.
Abychom tomu dodali trochu více kontextu, zde je snímek tabulky (z pagila
ukázková databáze):
+------------+-------------+----------+-----------+--------+----------------------------+ | 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 | ...
Vidíme amount
sloupec, pro který jsme vypočítali průměr.
Tabulka obsahuje mnohem více řádků, ale toto vám ukazuje příklad hodnot.
Filtrované výsledky
AVG()
funkce pracuje na řádcích vrácených dotazem. Pokud tedy filtrujete výsledky, výsledek AVG()
to bude odrážet.
Umožňuje filtrovat výsledky:
SELECT AVG(amount)
FROM payment
WHERE customer_id = 271;
Výsledek:
3.8233333333333333
Tentokrát jsme tedy dostali průměr všech částek zaplacených zákazníkem 271.
DISTINCT
Klíčové slovo
Můžete použít DISTINCT
klíčové slovo s AVG()
vypočítat pouze odlišné hodnoty. To znamená, že pokud existují nějaké duplicitní hodnoty, jsou považovány za jednu hodnotu.
Příklad:
SELECT
AVG(amount) AS "All",
AVG(DISTINCT amount) AS "Distinct"
FROM payment;
Výsledek:
+--------------------+--------------------+ | All | Distinct | +--------------------+--------------------+ | 4.2006673312979002 | 6.1447368421052632 | +--------------------+--------------------+
V tomto případě existuje velmi velký rozdíl mezi odlišnými a nevýraznými výsledky. To naznačuje, že v tomto sloupci je mnoho duplicitních hodnot.
Abychom to ověřili, můžeme vypsat odlišné hodnoty takto:
SELECT DISTINCT amount
FROM payment;
Výsledek:
+--------+ | 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)
Náš příklad tedy vrátil průměr těchto odlišných hodnot.