首页 > 解决方案 > 按值范围对某些行进行分组

问题描述

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

样本记录

标签: sqlsql-server

解决方案


如果我理解正确,您需要一组:

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;

推荐阅读