根据聚合值条件标记行

Posted

技术标签:

【中文标题】根据聚合值条件标记行【英文标题】:Tag a row based on aggregate value condition 【发布时间】:2021-07-06 22:48:42 【问题描述】:

这是我的数据集,其中 order 是每个产品的修复顺序。

我想要的是这里的另一列,比如说TagIDTagID 是一个 int 值,它将基于聚合 Count 列,如果大于或等于 5,则按产品对其进行分组。

所以数据集看起来像这样:

如何在 SQL Server 中完成此操作?

提前致谢。

【问题讨论】:

不太明白逻辑,你能详细说明吗? 根据问题指南,请展示您尝试过的内容并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。也不要使用图像作为数据,使用格式化文本。 @Charlieface,我需要根据总计数对记录进行分组。如果大于或等于 5,则按产品分组 @DaleK 我尝试使用格式化文本,但它以单行结尾,没有任何间距。请帮忙。 ***.com/help/formatting 【参考方案1】:

这需要递归 CTE。您已经有一个编号列,所以这很简单:

with cte as (
      select product, order, count, 1 as grp, count as s
      from t
      where order = 1
      union all
      select cte.product. t.order, t.count,
             (case when cte.s + t.count >= 5 then grp + 1 else grp end),
             (case when cte.s + t.count >= 5 then t.count else cte.s + t.count end)
      from cte join
           t
           on t.product = cte.product and t.order = cte.order + 1
     )
select *
from cte;

【讨论】:

以上是关于根据聚合值条件标记行的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 PySpark 中窗口聚合的条件计算不同值?

pandas dataframe:如何根据列的值聚合行的子集

熊猫将行值除以聚合总和,条件由其他单元格设置

MYSQL查询--聚合函数查询

aggregation 详解3(bucket aggregation)

mapboxgl中的标记聚类基于聚合值而不是点数