用于统计测量的SQL Oracle数据聚合(最大值,最小值,百分位数)

时间:2015-11-26 17:30:38

标签: sql oracle aggregation

需要计算数据库中每个国家/地区的金融部门的预期违约频率(edf)的最大值,最小值,中位数,百分位数(.1,.25,。75)。我为许多国家/地区提供了个人公司营业日edf。从本质上讲,金融部门将包括来自银行+公司(b1,b2 ......)的公司(a1,a2 ......)的edf,来自investmebt fund + ....等等 - >并为每个国家这样做。每当我执行查询时,我只返回每个国家/地区的fin扇区内的单个公司数据。问题是聚合这些edf,这样当我选择MAX(EDF)时,它给出了特定国家/地区内金融部门当天的最大edf (与最小值和百分位数相同)代码没有尝试聚合:

select EDFDATE_EOM,mkmvid1,cinc,edf1,MAX(edf1),MIN(edf1),median(edf1),
  PERCENTILE_CONT (.1) WITHIN GROUP (ORDER BY edf1) AS "10TH",
  PERCENTILE_CONT (.25) WITHIN GROUP (ORDER BY edf1) AS "25TH",
  PERCENTILE_CONT (.5) WITHIN GROUP (ORDER BY edf1) AS "50TH",
  PERCENTILE_CONT (.75) WITHIN GROUP (ORDER BY edf1) AS "75TH",
  PERCENTILE_CONT (.90) WITHIN GROUP (ORDER BY edf1) AS "90TH"

from
(
select EDFDATE_EOM,mkmvid as mkmvid1,cinc, edf1 
FROM
(
SELECT MAX(EDFDATE) as "EDFDATE_EOM"  
FROM CRP.V_COMPANY_CONTENT
where edfdate>='1Jan2014'
GROUP BY EXTRACT(YEAR FROM EDFDATE), EXTRACT(MONTH FROM EDFDATE), EXTRACT(day FROM EDFDATE)
),
(
SELECT EDFDATE, mkmvid,cinc,mkmvindcode,edf1 
FROM CRP.V_COMPANY_CONTENT
WHERE MKMVINDCODE IN ('N06','N23','N24','N29','N30','N31','N32','N46','N47','N48')   
and  edfdate >= '1Jan2014'
and edfdate < '1Jan2015'
and cinc in ('BEL','DEU','IRL','GRC','ESP','FRA','ITA','LUX','NLD' ,'AUT','PRT','SLV','SVK','FIN','EST','LVA','LTU')

)
where EDFDATE_EOM = EDFDATE
), CRP.COMPANY_MAPPING
where CRP.COMPANY_MAPPING.MKMVID = mkmvid1
group by EDFDATE_EOM,mkmvid1,,cinc,edf1 
order by 1,3;

edfdate_eom - 月末日期

edfdate - 营业日

mkmvid - 公司ID

cinc - 注册国家

edf1 - 预计1年默认频率

mkmvindcode - 行业代码(n06到n48;这是我想要构建的fin扇区)

如果您需要进一步说明,请告知我们。

1 个答案:

答案 0 :(得分:0)

要计算每个国家和行业代码的单独度量,请使用PERCENTILE_CONT

analytic example
 PERCENTILE_CONT (.1) WITHIN GROUP (ORDER BY edf1)
    OVER (PARTITION BY cinc,mkmvid1)

如果这不是答案,请简化您的问题,专注于您想要达到的目标。