2016-02-25 97 views
1

我有表order表,它有3個我感興趣的專欄:order ID,,day fulfilledorder ID是獨一無二的。如何使用百分位和排名給予平均90%的訂單平均日期

我需要了解在多少天內(平均),2016年1月份訂單中有90%需要支付。

如果爲了1在1天,2階在10天內履行了2天,3階3天......爲了10,那麼我會需要計算這樣:

  • 數訂單= 10
  • 10 = 9
  • 得到滿足,這些10個數量的第一9,以升序排列,把當
  • 90%:1+2+3+4+5+6+7+8+9 = 45天履行
  • 因此,對於第一個90%平均天訂單履行是:45/9 = 5天。

我該如何編寫一個查詢,以便首先按「完成的天數」排列訂單,然後計算該期間前90%的訂單花費的平均天數?

enter image description here

回答

0

首先,我們必須假設大部分的訂單已經從一月填補。

其次,你可以用分析函數來做到這一點。雖然百分位數函數起作用,但我通常以舊式的方式來做這件事。 。 。通過使用row_number()count(*)

select min(days) 
from (select (coalesce(datefulfilled, trunc(sysdate)) - dateordered) as days, 
      sum(count(*) over (order by (coalesce(datefulfilled, trunc(sysdate)) - dateordered)) as cumecnt, 
      sum(count(*)) over() as totalcnt 
     from orders o 
     group by (coalesce(datefulfilled, trunc(sysdate)) - dateordered) 
    ) d 
where cumecnt >= 0.9 * cnt ;