根据聚合值条件标记行
Posted
技术标签:
【中文标题】根据聚合值条件标记行【英文标题】:Tag a row based on aggregate value condition 【发布时间】:2021-07-06 22:48:42 【问题描述】:这是我的数据集,其中 order 是每个产品的修复顺序。
我想要的是这里的另一列,比如说TagID
。 TagID
是一个 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;
【讨论】:
以上是关于根据聚合值条件标记行的主要内容,如果未能解决你的问题,请参考以下文章
pandas dataframe:如何根据列的值聚合行的子集