Sql 百分位盘与百分位控制

Sql 百分位盘与百分位控制,sql,oracle,plsql,Sql,Oracle,Plsql,百分位盘和百分位盘的区别是什么 我从childstat中选择了一个表* FIRSTNAME GENDER BIRTHDATE HEIGHT WEIGHT -------------------------------------------------- ------ --------- ---------- ---------- lauren

百分位盘和百分位盘的区别是什么

我从childstat中选择了一个表*

FIRSTNAME                                          GENDER BIRTHDATE     HEIGHT     WEIGHT
-------------------------------------------------- ------ --------- ---------- ----------
lauren                                             f      10-JUN-00         54        876 
rosemary                                           f      08-MAY-00         35        123 
Albert                                             m      02-AUG-00         15        923 
buddy                                              m      02-OCT-00         15        150 
furkar                                             m      05-JAN-00         76        198 
simon                                              m      03-JAN-00         87        256 
tommy                                              m      11-DEC-00         78        167 
我试图区分这些百分位数

select firstname,height,
       percentile_cont(.50) within group (order by height) over() as pctcont_50_ht,
       percentile_cont(.72) within group (order by height) over() as pctcont_72_ht,
       percentile_disc(.50) within group (order by height) over () as pctdisc_50_ht,
       percentile_disc(.72) within group (order by height) over () as pctdisc_72_ht
from childstat order by height


FIRSTNAME                                              HEIGHT PCTCONT_50_HT PCTCONT_72_HT PCTDISC_50_HT PCTDISC_72_HT
-------------------------------------------------- ---------- ------------- ------------- ------------- -------------
buddy                                                      15            54         76.64            54            78 
Albert                                                     15            54         76.64            54            78 
rosemary                                                   35            54         76.64            54            78 
lauren                                                     54            54         76.64            54            78 
furkar                                                     76            54         76.64            54            78 
tommy                                                      78            54         76.64            54            78 
simon                                                      87            54         76.64            54            78 
但仍然无法理解这两个函数是如何实现的以及这两个函数的用途。

PERCENTILE_DISC在集合/窗口中返回一个值,而PERCENTILE_CONT将进行插值


在您的查询中,当您使用.72时,百分位_CONT在76和78之间插值,因为72%不是其中之一;百分位选择76个最低的

我发现这个解释非常有用


我认为这个想法是百分位盘应该用于离散范围,而百分位盘应该用于连续范围。Postgres在SQLFIDLE中检查百分位盘时返回78而不是76,VAL k为值54、35、15、15、76、87、78,从VAL中选择*到表格百分位盘;从percentile_src中按k as perc选择集团订单中的percentile_disc.72;这篇文章解释得很好。谢谢分享好的资源。
    ITEM REGION             WK FORECASTQTY
    ---- ---------- ---------- -----------
    TEST E                   3         137
    TEST E                   2         190
    TEST E                   1         232
    TEST E                   4         400



SELECT
   t.* ,
   PERCENTILE_CONT(0.5)
   WITHIN GROUP ( ORDER BY forecastqty)
   OVER (PARTITION BY ITEM , region ) AS PERCENTILE_CONT ,
   MEDIAN(forecastqty)
   OVER (PARTITION BY ITEM , region ) AS MEDIAN ,
   PERCENTILE_DISC(0.5)
   WITHIN GROUP ( ORDER BY forecastqty)
   OVER (PARTITION BY ITEM , region ) AS PERCENTILE_DISC
   FROM
   t ;



    ITEM REGION             WK FORECASTQTY PERCENTILE_CONT     MEDIAN PERCENTILE_DISC
    ---- ---------- ---------- ----------- --------------- ---------- ---------------
    TEST E                   3         137             211        211             190
    TEST E                   2         190             211        211             190
    TEST E                   1         232             211        211             190
    TEST E                   4         400             211        211             190