Sql 甲骨文中的百分位数
我有以下查询,在其中我试图计算出从发送信函到今天日期之间的天数的百分位数:Sql 甲骨文中的百分位数,sql,oracle,oracle11g,statistics,percentile,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
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\u SENT
的格式为YYYY-MON-DD:USER\u ID
。因此,我的查询使用SYSDATE
-TO_DATE(SUBSTR(M.LETTER_SENT,1,11),'YYYY-MON-DD')
计算出两个日期之间的天数。
因此,发送的M.LETTER_
以下4天结果集I的实际值2015-2月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
甲骨文对我的回报:11作为第10百分位,虽然
当我做0.2+0.8个百分位数时,我分别得到12242个。我一直明白有几种不同的方法来计算百分位数。那么Oracle是如何计算这些结果的呢?我对百分位数应该是多少的想法是错误的吗?为什么有
orderbysum()
?我想那将是一个累加的总数。如果您提供发送的字母的实际值,我们可能会提供更多帮助。@JeffreyKempM.LETTER\u SENT
的格式为YYYY-MON-DD:USER\u ID
。这就是关于信件日期的所有信息,我使用SYSDATE
-M.letter\u SENT
来获取信件发送后的天数。@JeffreyKemp添加到Q