SQL GROUP BY 和 COUNT 以及带列值的条件 SUM

SQL GROUP BY and COUNT and conditional SUM with column value

这是我的例子table。

┌────────┬────────┬───────┐
│ UserId │ Status │ Value │
├────────┼────────┼───────┤
│ 1      │ 1      │ 10    │
│ 1      │ 0      │ 5     │
│ 2      │ 0      │ 8     │
│ 2      │ 1      │ 15    │
│ 1      │ 1      │ 10    │
│ 1      │ 0      │ 5     │
└────────┴────────┴───────┘

我需要 GROUP BYUserId 然后 COUNT 组中的总行数,到目前为止我没有问题但我也想 SUM(Value) 根据Status专栏。像 COUNT 我的 sql 给我组行的总和,但我需要如下结果:-)

┌────────┬──────────────────────┬─────────────────────┐
│ UserId │ SUM(Value) Status=1  │ SUM(Value) Status=0 │
├────────┼──────────────────────┼─────────────────────┤
│ 1      │        20            │        10           │
│ 2      │        15            │        8            │
└────────┴──────────────────────┴─────────────────────┘

注意:这种类型的查询称为 条件聚合 您可以搜索更多相关信息。

使用这个

SELECT USERID,
SUM(CASE WHEN STATUS = 1 THEN VALUE ELSE 0 END ) AS ST1,
SUM(CASE WHEN STATUS = 0 THEN VALUE ELSE 0 END ) AS ST2 FROM 
DBO.TABLENAME
GROUP BY USERID

假设 Status 的数据类型是 BOOLEANINTEGER 可能的值只有 01:

SELECT UserId,
       SUM(Status * Value) Status_1,
       SUM((NOT Status) * Value) Status_0
FROM tablename
GROUP BY UserId;

参见demo