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.