sql >> Database teknologi >  >> RDS >> PostgreSQL

AVG() Funktion i PostgreSQL

I PostgreSQL er AVG() funktion beregner gennemsnittet (aritmetisk middelværdi) af alle inputværdier, der ikke er nul, og returnerer resultatet.

Eksempel

Her er et hurtigt eksempel for at demonstrere, hvordan det virker:

SELECT AVG(amount) 
FROM payment;

Resultat:

4.2006673312979002

I dette tilfælde amount er en kolonne i payment bord.

For at give dette lidt mere kontekst, er her et øjebliksbillede af tabellen (fra pagila eksempeldatabase):

+------------+-------------+----------+-----------+--------+----------------------------+
| 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 |
...

Vi kan se amount kolonne, som vi beregnede gennemsnittet for.

Tabellen indeholder mange flere rækker, men dette viser dig et eksempel på værdierne.

Filtrerede resultater

AVG() funktionen fungerer på de rækker, der returneres af forespørgslen. Så hvis du filtrerer resultaterne, vil resultatet af AVG() vil afspejle det.

Lad os filtrere resultaterne:

SELECT AVG(amount) 
FROM payment
WHERE customer_id = 271;

Resultat:

3.8233333333333333

Så denne gang fik vi gennemsnittet af alle beløb betalt af kunde 271.

DISTINCT Søgeord

Du kan bruge DISTINCT søgeord med AVG() kun at beregne distinkte værdier. Det vil sige, at hvis der er nogen duplikerede værdier, behandles de som én værdi.

Eksempel:

SELECT 
    AVG(amount) AS "All",
    AVG(DISTINCT amount) AS "Distinct"
FROM payment;

Resultat:

+--------------------+--------------------+
|        All         |      Distinct      |
+--------------------+--------------------+
| 4.2006673312979002 | 6.1447368421052632 |
+--------------------+--------------------+

I dette tilfælde er der en meget stor forskel mellem de distinkte og ikke-distinkte resultater. Dette tyder på, at der er mange duplikerede værdier i den kolonne.

For at bekræfte dette kan vi udlæse de forskellige værdier som dette:

SELECT DISTINCT amount
FROM payment;

Resultat:

+--------+
| 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)

Så vores eksempel returnerede gennemsnittet af disse forskellige værdier.


  1. Hvordan opretter man et indeks for elementer i et array i PostgreSQL?

  2. MySQL Insert-forespørgsel virker ikke med WHERE-sætning

  3. Er der nogen måde at skylle output fra PL/SQL i Oracle?

  4. Hvilke situationer får Oracle-pakker til at blive ugyldige?