PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak obliczyć percentyl w PostgreSQL

Obliczanie percentyla pomaga uszeregować dane do analizy, a także obliczyć medianę dla zestawu wartości. Oto jak obliczyć percentyl w PostgreSQL za pomocą percentile_cont funkcja okna. Przyjrzymy się również, jak obliczyć 50., 90., 95. i n. percentyl w PostgreSQL, ponieważ są one powszechnie używane w analizie danych.

Jak obliczyć percentyl w PostgreSQL

Percentyl obliczymy w PostgreSQL za pomocą percentile_cont funkcja okna

Załóżmy, że masz następującą tabelę sprzedaż(data_zamówienia,kwota) i chcesz obliczyć 50. percentyl.

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

Przeczytaj bonus:Jak wypełnić brakujące daty w PostgreSQL

Oto zapytanie do obliczenia 50. percentyla w PostgreSQL. Możesz użyć tego samego zapytania do obliczenia mediany w PostgreSQL.

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

W powyższym zapytaniu używamy percentile_cont funkcja okna, która pozwala określić, jaki percentyl (np. 0,5 to jest 50. percentyl), który chcesz obliczyć. Następnie używamy klauzuli WITHIN GROUP do obliczenia percentyla w grupie sprzedaż wartości. Używamy również klauzuli ORDER BY do sortowania wyprzedaży wartości przed obliczeniem percentyla w PostgreSQL.

Gdy używasz percentile_cont funkcja okna, PostgreSQL będzie interpolować medianę jako średnią z 2 średnich wartości (210, 215), w przypadku gdy są 2 średnie wartości. Dlatego zwraca 212,5

Przeczytaj bonus:Jak obliczyć średnią kroczącą w PostgreSQL

Jeśli możesz obliczyć percentyl w PostgreSQL, jeśli nie chcesz, aby PostgreSQL interpolował, ale zwracał tylko najbliższą wartość, użyj percentile_disc zamiast tego funkcja okna. Oto przykład

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

W takim przypadku zwróci jedną ze średnich wartości, w przypadku gdy są 2 średnie wartości.

Przeczytaj bonus:Jak zaimportować plik CSV do PostgreSQL

Jak obliczyć 90. percentyl w PostgreSQL

Podobnie możesz obliczyć 90. percentyl w PostgreSQL, używając percentile_cont. Zmieniamy 0,5 na 0,9 wcentylu_kont funkcja

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

Możesz również obliczyć 90. percentyl w PostgreSQL za pomocą percentile_disc

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

Jak obliczyć 95 percentyl w PostgreSQL

Podobnie możesz obliczyć 95. percentyl w PostgreSQL, używając percentile_cont

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

Możesz także obliczyć 95. percentyl w PostgreSQL, używając percentile_disc

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

Jak obliczyć n-ty percentyl w PostgreSQL

Podobnie możesz obliczyć n-ty percentyl w PostgreSQL za pomocą percentile_cont. Zasadniczo dostarczamy n/100 w percentile_cont funkcja

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

Możesz również obliczyć 90. percentyl w PostgreSQL za pomocą percentile_disc

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

Po obliczeniu percentyla w PostgreSQL możesz użyć narzędzia do raportowania PostgreSQL, aby wykreślić wartości percentyla wraz z wartościami sprzedaży na wykresie liniowym, aby przeanalizować różnicę, a także ustalić cele. W tym celu połączymy obliczoną 50-ty percentyl z oryginalną sprzedażą tabela, jak pokazano poniżej

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

Oto wykres liniowy przedstawiający dzienną sprzedaż wraz z percentylem, wykreślony za pomocą Ubiq

Jeśli chcesz tworzyć wykresy, dashboardy i raporty z bazy danych PostgreSQL, możesz wypróbować Ubiq. Oferujemy 14-dniowy bezpłatny okres próbny.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kolumna zmiany Rails Migration w celu użycia tablic Postgres

  2. Jaki jest właściwy indeks do odpytywania struktur w tablicach w jsonb Postgresa?

  3. Czy istnieje spadek wydajności przy użyciu dziesiętnych typów danych (MySQL / Postgres)

  4. Sekwencje, na które nie mają wpływu transakcje?

  5. Jak monitorować działanie PostgreSQL w kontenerze Docker:część pierwsza