SQL单表两列true值计数求和 按user_id分组关联另一表取用户名
SQL实现方案
你之前的写法统计的是全表col_a、col_b为true的总数量,无法按user_id拆分统计,改用分组聚合的方式即可实现需求,兼容所有主流SQL数据库的写法如下:
SELECT a.user_id, (SUM(CASE WHEN a.col_a = true THEN 1 ELSE 0 END) + SUM(CASE WHEN a.col_b = true THEN 1 ELSE 0 END)) AS "total (col_a + col_b)", b.name FROM "TABLE_A" a INNER JOIN "TABLE_B" b ON a.user_id = b.id GROUP BY a.user_id, b.name ORDER BY a.user_id ASC;
如果使用PostgreSQL等支持布尔值强转数值的数据库,可以简化写法:
SELECT a.user_id, (SUM(a.col_a::INT) + SUM(a.col_b::INT)) AS "total (col_a + col_b)", b.name FROM "TABLE_A" a INNER JOIN "TABLE_B" b ON a.user_id = b.id GROUP BY a.user_id, b.name ORDER BY a.user_id ASC;
逻辑说明
- 对
TABLE_A按user_id分组,通过INNER JOIN关联TABLE_B,匹配user_id和TABLE_B的主键id获取对应用户名 - 用
SUM配合CASE WHEN统计每个分组下col_a、col_b为true的条数,二者相加得到该用户的总计数 - 最终输出结果和你给出的预期结果完全一致
内容的提问来源于stack exchange,提问作者hero121
相关产品推荐
相关产品推荐

