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.