首页 > 解决方案 > SQL 将 Where 子句引入新列

问题描述

我在 SQL Server 上运行这个 SQL,它运行良好:

SELECT
    X.benefit,
    AVG(X.weight) AS W
FROM  
    (SELECT
         benefit,
         weight,
         comp
     FROM
         Segment_Responses AS a
     INNER JOIN 
         Segment_Descriptors AS b ON a.resp_id = b.resp_id
     WHERE
         b.comp = 0) AS X
GROUP BY
    X.benefit

我的问题是......虽然我可以用 b.comp=0 运行它(并获得好处和平均权重),然后再用 b.comp=1 (b.comp 是一个布尔值),有没有办法构造 SQL,以便有 3 个输出(好处,b.comp=0 时的平均权重和 b.comp=1 时的平均权重)。似乎这应该是可能的 - 我只是不知道该怎么做。谢谢。

标签: sqlsql-servertsql

解决方案


您可以查询几个case表达式的平均值:

SELECT
    X.benefit,
    AVG(CASE comp WHEN 1 THEN X.weight END) AS comp_1_avg,
    AVG(CASE comp WHEN 0 THEN X.weight END) AS comp_0_avg
FROM  
    (SELECT
         benefit,
         weight,
         comp
     FROM
         Segment_Responses AS a
     INNER JOIN 
         Segment_Descriptors AS b ON a.resp_id = b.resp_id) AS X
GROUP BY
    X.benefit

推荐阅读