有四个表格:
T_SALES
包含
CUST_KEY,
ITEM_KEY,
SALE_DATE,
SALES_DLR_SALES_QTY,
ORDER_QTY.
T_CUST
包含
CUST_KEY,
CUST_NUM,
PEER_GRP_ID
T_PEER_GRP
包含
PEER_GRP_ID,
PEER_GRP_DESC,
PRNT_PEER_GRP_ID
T_PRNT_PEEER
包含
PRNT_PEER_GRP_ID,
PRNT_PEER_DESC
现在对于上面的表格,我需要根据父对等体内对等组的计算fillrate = SALES_QTY / ORDER_QTY * 100
生成客户的百分位数。
有人可以帮忙吗?
答案 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;
<强>参考强>:
答案 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;
请注意,这会将分析函数与聚合函数混合在一起。当你第一次了解它时,这看起来很尴尬。