パーセンタイルの計算は、分析のためにデータをランク付けするだけでなく、一連の値の中央値を計算するのに役立ちます。 Percentile_contを使用してPostgreSQLでパーセンタイルを計算する方法は次のとおりです。 ウィンドウ関数。また、PostgreSQLで50パーセンタイル、90パーセンタイル、95パーセンタイル、nパーセンタイルを計算する方法についても説明します。これらは、データ分析で一般的に使用されているためです。
PostgreSQLでパーセンタイルを計算する方法
Percentile_contを使用してPostgreSQLのパーセンタイルを計算します ウィンドウ関数
次のテーブルがあるとしますsales(order_date、amount) 50パーセンタイルを計算したい。
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
ボーナスリード:PostgreSQLで欠落している日付を埋める方法
PostgreSQLで50パーセンタイルを計算するためのクエリは次のとおりです。同じクエリを使用して、PostgreSQLの中央値を計算できます。
postgres=# SELECT PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_cont ----------------- 212.5
上記のクエリでは、 Percentile_contを使用します パーセンタイルを定義できるウィンドウ関数(例: 0.5 つまり、50パーセンタイル)を計算します。次に、WITHIN GROUP句を使用して、 saleのグループ内のパーセンタイルを計算します。 値。また、ORDERBY句を使用して販売を並べ替えます PostgreSQLでパーセンタイルを計算する前の値。
percentile_contを使用する場合 ウィンドウ関数の場合、PostgreSQLは中央値を2つの中間値(210、215)の平均として補間します(2つの中間値がある場合)。 212.5を返すのはそのためです
ボーナスリード:PostgreSQLで移動平均を計算する方法
PostgreSQLでパーセンタイルを計算できる場合、PostgreSQLに補間させたくないが、最も近い値のみを返す場合は、 Percentile_discを使用します。 代わりにウィンドウ関数。これが例です
postgres=# SELECT PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_disc ----------------- 210
この場合、2つの中間値がある場合は、中間値の1つが返されます。
ボーナスリード:CSVファイルをPostgreSQLにインポートする方法
PostgreSQLで90パーセンタイルを計算する方法
同様に、percentile_contを使用してPostgreSQLで90パーセンタイルを計算できます。 0.5から0.9に変更します in percentile_cont 関数
postgres=# SELECT PERCENTILE_CONT(0.9) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_cont ----------------- 255
Percentile_disc を使用して、PostgreSQLで90パーセンタイルを計算することもできます。
postgres=# SELECT PERCENTILE_DISC(0.9) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_disc ----------------- 250
PostgreSQLで95パーセンタイルを計算する方法
同様に、 Percentile_cont を使用して、PostgreSQLで95パーセンタイルを計算できます。
postgres=# SELECT PERCENTILE_CONT(0.95) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_cont ----------------- 277.5
Percentile_disc を使用して、PostgreSQLで95パーセンタイルを計算することもできます。
postgres=# SELECT PERCENTILE_DISC(0.95) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_disc ----------------- 300
PostgreSQLでn番目のパーセンタイルを計算する方法
同様に、percentile_contを使用してPostgreSQLでn番目のパーセンタイルを計算できます。 基本的にn/100をpercentile_contで提供します 関数
postgres=# SELECT PERCENTILE_CONT(n/100) WITHIN GROUP(ORDER BY sale) FROM sales;
Percentile_disc を使用して、PostgreSQLで90パーセンタイルを計算することもできます。
postgres=# SELECT PERCENTILE_DISC(n/100) WITHIN GROUP(ORDER BY sale) FROM sales;
PostgreSQLでパーセンタイルを計算した後、PostgreSQLレポートツールを使用して、パーセンタイル値と販売値を折れ線グラフにプロットして、差異を分析し、目標設定を行うことができます。そのために、計算された50パーセンタイル値を元の売上と結合します。 以下に示す表
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
これは、Ubiqを使用してプロットされた1日の売上とパーセンタイルを示す折れ線グラフです
PostgreSQLデータベースからチャート、ダッシュボード、レポートを作成したい場合は、Ubiqを試すことができます。 14日間の無料トライアルを提供しています。