Процентный анализ в квартилях - PullRequest
1 голос
/ 20 марта 2019

Я пытаюсь получить максимум, минимум разницы между t3 и t3 в каждом квартиле. Но когда я изменяю процент # на 50,75 .. я вижу результат, указанный ниже. Я не уверен, что я делаю не так здесь.

SELECT MIN(SPREAD),MAX(SPREAD) FROM
  (SELECT COUNT(*)*1.0 AS TOTALLINES FROM pa_fcs)A,
  (SELECT SPREAD,ROWNUM *1.0 AS LINENUM FROM (
select BOARD_RATE_T3,BOARD_RATE_T1 ,(BOARD_RATE_T3-BOARD_RATE_T1) AS SPREAD 
  from  pa_fcs ))B 
  WHERE LINENUM/TOTALLINES <= .25;

OUTPUT: .25
Min(Spread)      Max(Spread)
7.47             5160.24

Output :.50
Min(Spread)      Max(Spread)
7.47             5160.24

Output: .75
Min(Spread)      Max(Spread)
0              5160.24     

1 Ответ

2 голосов
/ 21 марта 2019

Используйте NTILE аналитическую функцию для расчета квартилей.

Тогда MIN, MAX тривиальный exersize

create table tab as
select rownum spread from dual connect by level <= 100;

with ntile as (
select 
    spread,
    NTILE(4) OVER (ORDER BY spread DESC)  qtile
from tab)
select qtile, min(spread), max(spread)
from ntile
group by qtile order by 1
;

     QTILE MIN(SPREAD) MAX(SPREAD)
---------- ----------- -----------
         1          76         100
         2          51          75
         3          26          50
         4           1          25

Для вашего стола это будет что-то вроде

with spr as (
  select  (BOARD_RATE_T3-BOARD_RATE_T1) AS SPREAD 
  from  pa_fcs),
ntile as (
  select 
    spread,
    NTILE(4) OVER (ORDER BY spread DESC)  qtile
  from spr)
select qtile, min(spread), max(spread)
from ntile
group by qtile order by 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...