SQL - 根据客户支出计算百分位数

SQL - calculate percentile based on customer spend

我必须根据客户支出计算前 33% 的客户、中等的 33% 客户和低 33% 的客户。我有客户 ID 和他们的支出列,我需要在计算谁是前 33% 的客户等之后添加新列作为最高支出者、中等支出者和低支出者。

感谢任何帮助。

谢谢

我更喜欢使用 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() window 功能。我更喜欢更明确地进行计算,以便更好地控制平局时发生的情况。使用 rank() 所有花费相同的客户都在同一组中。