SSMS中按Style更新Groups表AvgXX字段的UPDATE语句实现问询
解决Groups表AvgXX字段的更新需求
没问题,我帮你写一个符合要求的UPDATE语句,同时拆解一下逻辑,确保你能理解每一步的作用:
UPDATE g SET AvgXX = agg.AverageAmount FROM Groups g INNER JOIN ( -- 先计算每个StyleKey对应的符合条件的平均Amount SELECT g_inner.StyleKey, AVG(o_distinct.Amount) AS AverageAmount FROM Groups g_inner -- 第一步:对Orders去重,确保同一天(DaysKey)的同Group下Amount只统计一次 INNER JOIN ( SELECT DISTINCT GroupKey, DaysKey, Amount FROM Orders ) o_distinct ON g_inner.Key = o_distinct.GroupKey -- 关联Days表,筛选出Day≥100的记录 INNER JOIN Days d ON o_distinct.DaysKey = d.Key WHERE d.Day >= 100 -- 按StyleKey分组,计算该分组下的平均Amount GROUP BY g_inner.StyleKey ) agg ON g.StyleKey = agg.StyleKey;
关键逻辑说明:
- 去重处理:内层的
SELECT DISTINCT GroupKey, DaysKey, Amount是核心,它保证了同一个DaysKey(同一天)、同一个GroupKey对应的Amount只会出现一次,完美满足“同一天的多条Amount记录仅统计一次”的要求。 - 筛选条件:通过关联
Days表,我们只保留Day≥100的订单记录,确保计算范围正确。 - 分组计算:最后按
StyleKey分组,计算该风格下所有符合条件的去重后Amount的平均值,再更新到Groups表的AvgXX字段。
如果需要处理没有符合条件记录的StyleKey(避免AvgXX被设为NULL),可以把SET AvgXX = agg.AverageAmount改成SET AvgXX = ISNULL(agg.AverageAmount, 0),这样会把无数据的情况设为0,你可以根据实际需求调整。
内容的提问来源于stack exchange,提问作者SUMguy
相关产品推荐
相关产品推荐

