如何根据计算得到百分等级

时间:2014-07-02 11:23:42

标签: sql oracle

有四个表格:

  1. T_SALES包含

    等列
    CUST_KEY,
    ITEM_KEY,
    SALE_DATE,
    SALES_DLR_SALES_QTY,
    ORDER_QTY.
    
  2. T_CUST包含

    等列
    CUST_KEY,
    CUST_NUM,
    PEER_GRP_ID
    
  3. T_PEER_GRP包含

    等列
    PEER_GRP_ID,
    PEER_GRP_DESC,
    PRNT_PEER_GRP_ID
    
  4. T_PRNT_PEEER包含

    等列
    PRNT_PEER_GRP_ID,
    PRNT_PEER_DESC
    
  5. 现在对于上面的表格,我需要根据父对等体内对等组的计算fillrate = SALES_QTY / ORDER_QTY * 100生成客户的百分位数。

    有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

您可以使用分析函数PERCENT_RANK()来计算百分等级,如下所示:

SELECT
    t_s.cust_key,
    t_c.cust_num,
    PERCENT_RANK() OVER (ORDER BY (t_s.SALES_DLR_SALES_QTY / ORDER_QTY) DESC) as pr
FROM t_sales t_s
INNER JOIN t_cust t_c ON t_s.cust_key = t_c.cust_key
ORDER BY pr;

<强>参考

PERCENT_RANK on Oracle® Database SQL Reference

答案 1 :(得分:0)

如果通过&#34;百分位等级&#34;你的意思是&#34;百分比&#34; (记录here),然后更难的部分是join。我认为这是百分位数所需的基本数据:

select t.PEER_GRP_ID, t.PRNT_PEER_GRP_ID,
       sum(SALES_DLR_SALES_QTY * ORDER_QTY) as total
from t_sales s join
     t_customers c
     on s.CUST_KEY = c.cust_key join
     t_peer_grp t
     on t.PEER_GRP_ID = c.PEER_GRP_ID
group by  t.PEER_GRP_ID, t.PRNT_PEER_GRP_ID;

然后,您可以将百分位数(0到100)计算为:

select t.PEER_GRP_ID, t.PRNT_PEER_GRP_ID,
       sum(SALES_DLR_SALES_QTY * ORDER_QTY) as total,
       percentile_rank() over (partition by  t.PRNT_PEER_GRP_ID
                               order by sum(SALES_DLR_SALES_QTY * ORDER_QTY)
                              )
from t_sales s join
     t_customers c
     on s.CUST_KEY = c.cust_key join
     t_peer_grp t
     on t.PEER_GRP_ID = c.PEER_GRP_ID
group by t.PEER_GRP_ID, t.PRNT_PEER_GRP_ID;

请注意,这会将分析函数与聚合函数混合在一起。当你第一次了解它时,这看起来很尴尬。