2014-05-10 12 views
10

Qual è la differenza tra PERCENTILE_DISC e PERCENTILE_CONT,PERCENTILE_DISC vs PERCENTILE_CONT

Ho una tabella ### select * from 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 

e sto provando a differenziare tra queste percentile

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 

Ma ancora non riesco a capire come questo due e che cosa è l'uso di queste due funzioni ..

risposta

14

PERCENTILE_DISC restituisce un valore nella serie/finestra, mentre PERCENTILE_CONT interpola;

Nella query, quando si utilizza .72, PERCENTILE_CONT interpola tra 76 e 78, poiché il 72% non è uno di questi; PERCENTILE_DISC sceglie 76 (il più basso di quelli)

+7

Penso che l'idea fosse il 'PERCENTILE_DISC()' doveva essere per ** intervalli discreti **, mentre 'PERCENTILE_CONT()' doveva essere per ** continuo ** intervalli. –