sql - 按值范围对某些行进行分组
问题描述
我正在尝试按价格范围对某些记录进行分组。假设客户 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?
解决方案
如果我理解正确,您需要一组:
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;
推荐阅读
- python - 调试:二叉树的右视图
- sql - 如何授予执行 SQL Server 中的所有函数以进行分组
- java - Android上是否有禁用点击监听器?
- javascript - 比较两个 json 对象并根据匹配键从一个对象中获取数据
- wmic - Linux 中的 WMIC 返回 [wmi/wmic.c:212:main()] 错误:检索结果数据
- cas - CAS SSO 构建自定义身份验证处理程序
- python - 如果其中一个为空,则两个查询集的联合会导致编程错误
- python - Python linux - 监听打开的终端标准输出
- elasticsearch - 如何计算 Elasticsearch 字段数组中包含多个对象的文档总数?
- python-3.x - 有没有一种更优雅的方式来使用“while 循环”而不必先在“while 循环”之外定义变量?