SQL Server查询如何将不同WHERE条件对应的平均值输出为新列
SQL Server实现多条件平均值合并输出方案
你可以使用条件聚合逻辑实现需求,无需执行两次查询,参考SQL如下:
SELECT a.benefit, AVG(CASE WHEN b.comp = 0 THEN a.weight END) AS avg_weight_when_comp_0, AVG(CASE WHEN b.comp = 1 THEN a.weight END) AS avg_weight_when_comp_1 FROM Segment_Responses AS a INNER JOIN Segment_Descriptors AS b ON a.resp_id = b.resp_id -- 如果comp字段存在0/1以外的取值,可打开下方注释过滤无效数据 -- WHERE b.comp IN (0,1) GROUP BY a.benefit
逻辑说明
- 移除了原SQL中针对comp的WHERE过滤条件,保留所有comp为0、1的有效记录
- 用
CASE WHEN做分支判断,仅返回对应comp取值的weight值,不符合条件的记录返回NULL,AVG聚合函数会自动忽略NULL值,刚好实现分场景统计平均值的需求 - 如果需要把无匹配记录的空值替换为0,可以将计算逻辑包裹在
ISNULL()函数中,示例:ISNULL(AVG(CASE WHEN b.comp = 0 THEN a.weight END), 0) AS avg_weight_when_comp_0
内容的提问来源于stack exchange,提问作者Allen
相关产品推荐
相关产品推荐

