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

Sådan beregnes median i PostgreSQL

Beregning af median hjælper dig med at finde mellemværdier i data og undgå støj på grund af ekstreme værdier. Sådan beregnes medianen i PostgreSQL ved hjælp af percentile_cont da der ikke er nogen funktion til at beregne median i PostgreSQL

Sådan beregnes median i PostgreSQL

Vi vil beregne median i PostgreSQL ved at beregne 50. percentilværdi, da der ikke er nogen indbygget funktion til at beregne median i PostgreSQL.

Lad os sige, at du har følgende tabel salg(ordre_dato,beløb)

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 Læs:Sådan beregnes glidende gennemsnit i PostgreSQL

Her er forespørgslen for at finde median, det vil sige beregne 50. percentil i PostgreSQL.

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

I ovenstående forespørgsel bruger vi percentile_cont funktion, der giver dig mulighed for at definere, hvilken percentil (f.eks. 0,5 det er 50. percentil), du vil beregne. Så bruger vi også WITHIN GROUP-sætning til at fortælle PostgreSQL at beregne percentilen inden for gruppen salg værdier. Vi bruger også ORDER BY-klausulen til at fortælle PostgreSQL at sortere salget værdier før medianen beregnes.

Når du bruger percentile_cont , vil PostgreSQL interpolere medianværdien som gennemsnittet af 2 mellemværdier (210.215).

Bonus Læs:Sådan importeres CSV-fil i PostgreSQL-tabel

Hvis du ikke vil have PostgreSQL til at interpolere, men kun returnere den nærmeste værdi, skal du bruge percentile_disc i stedet. Her er et eksempel

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

Hvis du ønsker at beregne medianen i PostgreSQL for hver gruppe, skal du bruge GROUP BY-sætning som vist nedenfor. Lad os sige dit salg tabel indeholder også produkt kolonne med produktnavne. I så fald kan du beregne medianen for hvert produkt ved hjælp af følgende forespørgsel.

postgres=# SELECT PRODUCT, PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY sale) 
FROM sales 
GROUP BY PRODUCT;

Bonus Læs:Sådan beregnes månedlig vækst i PostgreSQL

Når du har beregnet median i PostgreSQL, kan du bruge et PostgreSQL-rapporteringsværktøj til at plotte medianværdierne sammen med salgsværdier på et linjediagram for at analysere forskellen. Til det vil vi forbinde den beregnede medianværdi med det oprindelige salg tabel som vist nedenfor

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

Her er et linjediagram, der viser det daglige salg sammen med medianen, plottet ved hjælp af Ubiq

Hvis du vil oprette diagrammer, dashboards og rapporter fra PostgreSQL-databasen, kan du prøve Ubiq. Vi tilbyder en 14-dages gratis prøveperiode.

  1. Er kolonne- og tabelnavne følsomme for store og små bogstaver i MySQL?

  2. Hvad er forskellen mellem LATERAL JOIN og en underforespørgsel i PostgreSQL?

  3. Postgres dynamiske forespørgselsfunktion

  4. Nulstilling af array-pointer i PDO-resultater