sql >> Database >  >> RDS >> PostgreSQL

AVG()-functie in PostgreSQL

In PostgreSQL is de AVG() functie berekent het gemiddelde (rekenkundig gemiddelde) van alle niet-null invoerwaarden en retourneert het resultaat.

Voorbeeld

Hier is een snel voorbeeld om te laten zien hoe het werkt:

SELECT AVG(amount) 
FROM payment;

Resultaat:

4.2006673312979002

In dit geval amount is een kolom in de payment tafel.

Om dit wat meer context te geven, is hier een momentopname van de tabel (van de pagila voorbeelddatabase):

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

We kunnen het amount zien kolom waarvoor we het gemiddelde hebben berekend.

De tabel bevat veel meer rijen, maar dit toont u een voorbeeld van de waarden.

Gefilterde resultaten

De AVG() functie werkt op de rijen die door de query worden geretourneerd. Dus als u de resultaten filtert, wordt het resultaat van AVG() zal dat weerspiegelen.

Laten we de resultaten filteren:

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

Resultaat:

3.8233333333333333

Dus deze keer kregen we het gemiddelde van alle bedragen betaald door klant 271.

De DISTINCT Zoekwoord

U kunt de DISTINCT . gebruiken zoekwoord met AVG() om alleen verschillende waarden te berekenen. Dat wil zeggen, als er dubbele waarden zijn, worden deze als één waarde behandeld.

Voorbeeld:

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

Resultaat:

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

In dit geval is er een zeer groot verschil tussen de verschillende en niet-onderscheiden resultaten. Dit suggereert dat er veel dubbele waarden in die kolom staan.

Om dit te verifiëren, kunnen we de verschillende waarden als volgt uitvoeren:

SELECT DISTINCT amount
FROM payment;

Resultaat:

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

Dus ons voorbeeld retourneerde het gemiddelde van die verschillende waarden.


  1. Maak een back-up van uw MySQL-databases

  2. Onverwacht @@rowcount-gedrag binnen een UDF in MS SQL 2019

  3. Vind rijen waar tekstarray een waarde bevat die vergelijkbaar is met invoer

  4. Haal de eeuw uit een datum in PostgreSQL