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 BY
行 UserId
然后 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
的数据类型是 BOOLEAN
或 INTEGER
可能的值只有 0
和 1
:
SELECT UserId,
SUM(Status * Value) Status_1,
SUM((NOT Status) * Value) Status_0
FROM tablename
GROUP BY UserId;
参见demo。
这是我的例子table。
┌────────┬────────┬───────┐
│ UserId │ Status │ Value │
├────────┼────────┼───────┤
│ 1 │ 1 │ 10 │
│ 1 │ 0 │ 5 │
│ 2 │ 0 │ 8 │
│ 2 │ 1 │ 15 │
│ 1 │ 1 │ 10 │
│ 1 │ 0 │ 5 │
└────────┴────────┴───────┘
我需要 GROUP BY
行 UserId
然后 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
的数据类型是 BOOLEAN
或 INTEGER
可能的值只有 0
和 1
:
SELECT UserId,
SUM(Status * Value) Status_1,
SUM((NOT Status) * Value) Status_0
FROM tablename
GROUP BY UserId;
参见demo。