sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLでパーセンタイルを計算する方法

    パーセンタイルの計算は、分析のためにデータをランク付けするだけでなく、一連の値の中央値を計算するのに役立ちます。 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日間の無料トライアルを提供しています。

    1. Oracleのデフォルトの制約名は何ですか?

    2. 特別な島々

    3. PLS-00302を取得するのはなぜですか:コンポーネントは存在するときに宣言する必要がありますか?

    4. MySQLが集計関数なしでgroupbyクエリを許可するのはなぜですか?