W PostgreSQL AVG()
funkcja oblicza średnią (średnią arytmetyczną) wszystkich niezerowych wartości wejściowych i zwraca wynik.
Przykład
Oto krótki przykład pokazujący, jak to działa:
SELECT AVG(amount)
FROM payment;
Wynik:
4.2006673312979002
W tym przypadku amount
to kolumna w payment
stół.
Aby nadać temu nieco więcej kontekstu, oto migawka tabeli (z pagila
przykładowa baza danych):
+------------+-------------+----------+-----------+--------+----------------------------+ | 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 | ...
Widzimy amount
kolumna, dla której obliczyliśmy średnią.
Tabela zawiera znacznie więcej wierszy, ale to pokazuje przykład wartości.
Przefiltrowane wyniki
AVG()
funkcja działa na wierszach zwróconych przez zapytanie. Więc jeśli filtrujesz wyniki, wynik AVG()
odzwierciedli to.
Filtrujmy wyniki:
SELECT AVG(amount)
FROM payment
WHERE customer_id = 271;
Wynik:
3.8233333333333333
Więc tym razem otrzymaliśmy średnią wszystkich kwot zapłaconych przez klienta 271.
DISTINCT
Słowo kluczowe
Możesz użyć DISTINCT
słowo kluczowe z AVG()
aby obliczyć tylko różne wartości. Oznacza to, że jeśli istnieją jakiekolwiek zduplikowane wartości, są one traktowane jako jedna wartość.
Przykład:
SELECT
AVG(amount) AS "All",
AVG(DISTINCT amount) AS "Distinct"
FROM payment;
Wynik:
+--------------------+--------------------+ | All | Distinct | +--------------------+--------------------+ | 4.2006673312979002 | 6.1447368421052632 | +--------------------+--------------------+
W tym przypadku istnieje bardzo duża różnica między wynikami wyraźnymi i niewyraźnymi. Sugeruje to, że w tej kolumnie jest wiele zduplikowanych wartości.
Aby to zweryfikować, możemy wyprowadzić różne wartości w następujący sposób:
SELECT DISTINCT amount
FROM payment;
Wynik:
+--------+ | 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)
Więc nasz przykład zwrócił średnią z tych odrębnych wartości.