PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Funkcja AVG() w PostgreSQL

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wiosna 2011 Konferencje PostgreSQL, USA/Kanada

  2. Jak zaimportować istniejące pliki *.sql w PostgreSQL 8.4?

  3. Dlaczego Postgres mówi, że kolumna nie istnieje?

  4. java.lang.ClassNotFoundException:org.postgresql.Driver

  5. Sortowanie drzewa ze zmaterializowaną ścieżką?