sql >> Database >  >> RDS >> PostgreSQL

Percentiel berekenen in PostgreSQL

Percentiel berekenen helpt u bij het rangschikken van gegevens voor analyse en bij het berekenen van de mediaan voor een reeks waarden. Hier leest u hoe u het percentiel in PostgreSQL kunt berekenen met percentile_cont venster functie. We zullen ook bekijken hoe u het 50e percentiel, 90e percentiel, 95e percentiel en nde percentiel in PostgreSQL kunt berekenen, aangezien deze vaak worden gebruikt bij gegevensanalyse.

Percentiel berekenen in PostgreSQL

We berekenen het percentiel in PostgreSQL met behulp van percentile_cont vensterfunctie

Stel dat u de volgende tabel sales(order_date,amount) . heeft en u wilt het 50e percentiel berekenen.

postgres=# create table sales(order_date date,sale int);

postgres=# insert into sales values('2020-04-01',210),
           ('2020-04-02',125),('2020-04-03',150),('2020-04-04',230),
           ('2020-04-05',200),('2020-04-10',220),('2020-04-06',25),
           ('2020-04-07',215),('2020-04-08',300),('2020-04-09',250);

postgres=# select * from sales;
 order_date | sale
------------+------
 2020-04-01 |  210
 2020-04-02 |  125
 2020-04-03 |  150
 2020-04-04 |  230
 2020-04-05 |  200
 2020-04-10 |  220
 2020-04-06 |   25
 2020-04-07 |  215
 2020-04-08 |  300
 2020-04-09 |  250

Bonus lezen:ontbrekende datums in PostgreSQL invullen

Dit is de vraag om het 50e percentiel in PostgreSQL te berekenen. U kunt dezelfde zoekopdracht gebruiken om de mediaan in PostgreSQL te berekenen.

postgres=# SELECT PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY sale) FROM sales;
 percentile_cont
-----------------
           212.5

In de bovenstaande zoekopdracht gebruiken we percentile_cont vensterfunctie waarmee u kunt definiëren welk percentiel (bijv. 0,5 dat is het 50e percentiel) dat u wilt berekenen. Dan gebruiken we ook de clausule WITHIN GROUP om het percentiel te berekenen binnen de groep van verkoop waarden. We gebruiken ook de ORDER BY-clausule om de verkoop te sorteren waarden voordat we percentiel berekenen in PostgreSQL.

Wanneer u percentile_cont . gebruikt window-functie, zal PostgreSQL de mediaanwaarde interpoleren als het gemiddelde van 2 middelste waarden (210, 215) in het geval dat er 2 middelste waarden zijn. Daarom retourneert het 212,5

Bonus lezen:voortschrijdend gemiddelde berekenen in PostgreSQL

Wanneer u percentiel in PostgreSQL kunt berekenen en u niet wilt dat PostgreSQL interpoleert maar alleen de dichtstbijzijnde waarde retourneert, gebruikt u percentile_disc vensterfunctie in plaats daarvan. Hier is een voorbeeld

postgres=# SELECT PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY sale) FROM sales;
 percentile_disc
-----------------
             210

In dit geval zal het een van de middelste waarden retourneren, voor het geval er 2 middelste waarden zijn.

Bonus Lezen:CSV-bestand importeren in PostgreSQL

Hoe het 90e percentiel in PostgreSQL te berekenen

Op dezelfde manier kunt u het 90e percentiel in PostgreSQL berekenen met behulp van percentile_cont. We veranderen 0,5 in 0,9 in percentile_cont functie

postgres=# SELECT PERCENTILE_CONT(0.9) WITHIN GROUP(ORDER BY sale) FROM sales;
percentile_cont
-----------------
255

U kunt het 90e percentiel in PostgreSQL ook berekenen met percentile_disc

postgres=# SELECT PERCENTILE_DISC(0.9) WITHIN GROUP(ORDER BY sale) FROM sales;
percentile_disc
-----------------
250

Het 95e percentiel berekenen in PostgreSQL

Op dezelfde manier kunt u het 95e percentiel in PostgreSQL berekenen met behulp van percentile_cont

postgres=# SELECT PERCENTILE_CONT(0.95) WITHIN GROUP(ORDER BY sale) FROM sales;
percentile_cont
-----------------
277.5

Je kunt ook het 95e percentiel in PostgreSQL berekenen met percentile_disc

postgres=# SELECT PERCENTILE_DISC(0.95) WITHIN GROUP(ORDER BY sale) FROM sales;
percentile_disc
-----------------
300

Hoe het n-de percentiel in PostgreSQL te berekenen

Op dezelfde manier kunt u het n-de percentiel in PostgreSQL berekenen met behulp van percentile_cont. We leveren in principe n/100 in percentile_cont functie

postgres=# SELECT PERCENTILE_CONT(n/100) WITHIN GROUP(ORDER BY sale) FROM sales;

U kunt het 90e percentiel in PostgreSQL ook berekenen met percentile_disc

postgres=# SELECT PERCENTILE_DISC(n/100) WITHIN GROUP(ORDER BY sale) FROM sales;

Nadat u het percentiel in PostgreSQL heeft berekend, kunt u een PostgreSQL-rapportagetool gebruiken om de percentielwaarden samen met de verkoopwaarden in een lijndiagram uit te zetten om het verschil te analyseren en ook om doelen te stellen. Daarvoor voegen we de berekende 50e percentielwaarde toe aan de originele verkoop tabel zoals hieronder weergegeven

postgres=# select * from sales,
(SELECT PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY sale) FROM sales) temp 
order by order_date;
 order_date | sale | percentile_cont
------------+------+-----------------
 2020-04-01 |  210 |           212.5
 2020-04-02 |  125 |           212.5
 2020-04-03 |  150 |           212.5
 2020-04-04 |  230 |           212.5
 2020-04-05 |  200 |           212.5
 2020-04-06 |   25 |           212.5
 2020-04-07 |  215 |           212.5
 2020-04-08 |  300 |           212.5
 2020-04-09 |  250 |           212.5
 2020-04-10 |  220 |           212.5

Hier is een lijndiagram dat de dagelijkse verkoop samen met het percentiel toont, uitgezet met Ubiq

Als u grafieken, dashboards en rapporten wilt maken vanuit de PostgreSQL-database, kunt u Ubiq proberen. We bieden een gratis proefperiode van 14 dagen.

  1. SQL Server Error 110:Er zijn minder kolommen in de INSERT-instructie dan de waarden die zijn opgegeven in de VALUES-clausule.

  2. Een kloon maken van uw MySQL- of PostgreSQL-databasecluster

  3. Welk gegevenstype moet worden gebruikt voor het gehashte wachtwoordveld en welke lengte?

  4. Tijdelijke tabellen vergelijken voor PostgreSQL en Oracle GTT