sql >> Databáze >  >> RDS >> PostgreSQL

Funkce AVG() v PostgreSQL

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.


  1. Rychlejší způsob vkládání pomocí skriptu v Oracle?

  2. Prahové hodnoty optimalizace – seskupování a agregace dat, část 5

  3. Nový způsob, jak si přizpůsobit sledování PostgreSQL pomocí Prometheus

  4. Proč heslo password_verify vrací hodnotu false?