Teradata顶级中下客户

时间:2017-01-23 21:01:38

标签: sql group-by teradata rank partition-by

我有一个客户数据集,其中包含客户ID和客户支出。我需要根据客户发送将客户数据集拆分为3组(高支出客户,中等支出客户,低支出客户)。我尝试使用RANK和Partitio,但我无法给出组数(3)。有没有其他方法可以用Teradata做到这一点。 如果有9个客户,我需要先按照花费的金额对它们进行排序,然后将它们分成3组,并计算每组下有多少客户(3)。同时确定每组下花费的最小值和最大值

Say,Cust F,G,我花了9到12美元,并且花费很高  客户A,B,D花费在4美元到8美元之间并处于中等支出 客户C,E,H花费在1美元至3美元之间并且支出不足

输出应该是 GROUP(1,2,3); #Custs(3,3,3); Min_Spend($ 9 $ 4,$ 1); MAX_SPEND($ 12 $ 8 $ 3)

1 个答案:

答案 0 :(得分:1)

有一个名为QUANTILE的旧函数,但最好用符合标准SQL的语法替换它:

3 * (RANK() OVER (ORDER BY spend) - 1) / COUNT(*) OVER() AS Q

这为每个组分配一个介于0到2之间的数字,您可以轻松地将其包装在派生表中并在其上添加聚合。