sql >> Databasteknik >  >> RDS >> PostgreSQL

AVG() Funktion i PostgreSQL

I PostgreSQL, AVG() funktion beräknar medelvärdet (arithmetiskt medelvärde) av alla indatavärden som inte är noll och returnerar resultatet.

Exempel

Här är ett snabbt exempel för att visa hur det fungerar:

SELECT AVG(amount) 
FROM payment;

Resultat:

4.2006673312979002

I det här fallet, amount är en kolumn i payment tabell.

För att ge detta lite mer sammanhang, här är en ögonblicksbild av tabellen (från pagila exempeldatabas):

+------------+-------------+----------+-----------+--------+----------------------------+
| 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 kolumn som vi beräknade medelvärdet för.

Tabellen innehåller många fler rader, men den här visar ett exempel på värdena.

Filtrerade resultat

AVG() funktionen fungerar på raderna som returneras av frågan. Så om du filtrerar resultaten blir resultatet av AVG() kommer att återspegla det.

Låt oss filtrera resultaten:

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

Resultat:

3.8233333333333333

Så den här gången fick vi genomsnittet av alla belopp som betalats av kund 271.

DISTINCT Nyckelord

Du kan använda DISTINCT nyckelord med AVG() för att endast beräkna distinkta värden. Det vill säga, om det finns några dubbletter av värden, behandlas de som ett värde.

Exempel:

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

Resultat:

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

I det här fallet är det en mycket stor skillnad mellan de distinkta och icke-särskiljande resultaten. Detta tyder på att det finns många dubbletter av värden i den kolumnen.

För att verifiera detta kan vi mata ut de distinkta värdena så här:

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å vårt exempel returnerade medelvärdet av dessa distinkta värden.


  1. Grunderna i SQL Server ALTER TABLE Statement

  2. Hur räknar man alla rader när man använder SELECT med LIMIT i MySQL-frågan?

  3. Ansluter Oracle till PostgreSQL

  4. SQLite datum och tid funktioner