Oracle中的百分位数

时间:2015-02-27 15:15:59

标签: sql oracle oracle11g statistics percentile

我有以下查询,其中我试图在发送信件和今天的日期之间计算百分位数:

SELECT PERCENTILE_DISC(0.1) WITHIN GROUP (ORDER BY SUM(TRUNC(SYSDATE) -
            ( TO_DATE( SUBSTR(M.LETTER_SENT, 1, 11), 'YYYY-MON-DD') )) ASC) AS PERCENTILE_10,
   PERCENTILE_DISC(0.9) WITHIN GROUP (ORDER BY SUM(TRUNC(SYSDATE) -
            ( TO_DATE( SUBSTR(M.LETTER_SENT, 1, 11), 'YYYY-MON-DD') )) ASC) AS PERCENTILE_90
FROM MV_TABLE M8
WHERE M8.LETTER_SENT != 'N'
GROUP BY M8.LETTER_SENT;

我可能错误地认为,它应该返回结果集的第10和第90百分位数?

M.LETTER_SENT的格式为YYYY-MON-DD: USER_ID。因此,我的查询使用SYSDATE - TO_DATE(SUBSTR(M.LETTER_SENT,1, 11), 'YYYY-MON-DD')来计算两者之间的天数。 因此,结果集I的M.LETTER_SENT实际值列​​在下面的4天2015-Feb-27: rstone

该查询返回以下结果集:

242
4
4
4
39
11
18
361

我对百分位数的理解是,如果你想要第90个百分位,则会发生以下情况。

number of records * percentile = percentile => (round up) = index value

所以在我的情况下:

8 * 0.1 = 0.8 => (round up) = 1

8 * 0.9 = 7.2 => (round up) = 8

有序结果集上的第一个值是:4 有序结果集上的第8个值是:361

Oracle对我来说回报:11虽然是第10个百分点?

当我做0.2 + 0.8百分位时,我分别得到12,242。我一直都知道有几种不同的方法来计算百分位数。那么Oracle如何计算这些结果我对错误应该是什么的想法是错误的呢?

0 个答案:

没有答案