我必须根据客户支出来计算前33%的客户,中33%的客户和低33%的客户。我有客户ID和他们的支出列,在计算出谁是前33%的客户等等之后,我需要添加新列作为最高支出者,中支出者和低支出者。
感谢您的帮助。
谢谢
答案 0 :(得分:1)
我更喜欢使用rank()
或row_number()
进行计算:
select t.*,
(case when rank() over (order by spend) <= 0.33 * count(*) over ()
then 'low'
when when rank() over (order by spend) <= 0.67 * count(*) over ()
then 'medium'
else 'high'
end) as spend_group
from t;
您还可以使用ntile()
窗口功能。我希望更明确地进行计算,以便更好地控制发生平局时的情况。使用rank()
,所有支出相同的客户都在同一组中。