我正在尝试按价格范围对某些记录进行分组。假设客户A多次购买产品B,如下图所示,我想将它们组合在一起。下面的客户购买了不同价位的产品,例如 800,810,830,850 等。我想将每个价位与表中的其他价位进行比较,看看它们是否可以组合在一起。
假设有十个价格点
800,800,850,820,830,1200,1220,1200,1250,1230.
我想对其范围内 10% 的数字进行分组。前 5 个号码 800,800,850,820,830 在一个组中,其他号码在另一个组中。我怎样才能实现这个 SQL Server?
答案 0 :(得分:0)
如果我理解正确,你想要一组:
min + 0.1 * (max - min)
将每个客户作为一个组。然后你想要其他组中的其余部分。您可以为此使用窗口函数和算术:
select t.*,
(case when price <= 0.1 * max(price) over (partition by customer) + 0.9 * min(price) over (partition by customer)
then 1 else 2
end) as the_group
from t;