我有以下查询,其中我试图在发送信件和今天的日期之间计算百分位数:
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如何计算这些结果我对错误应该是什么的想法是错误的呢?