按值范围对某些行进行分组

时间:2021-05-04 21:53:38

标签: sql sql-server

我正在尝试按价格范围对某些记录进行分组。假设客户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?

Sample Records

1 个答案:

答案 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;