如何按用户名分组对cat为A、B的counts求和?SQL查询求助
问题分析与解决
你的SQL存在两个核心问题,导致无法实现预期的求和效果:
- 条件逻辑错误:
cat ='A' and cat ='B'永远不成立,单条记录的cat不可能同时等于A和B; - 分组维度错误:按
username, cat分组会把A、B、C各自单独统计,无法将A和B的counts合并求和。
正确写法1:通过分组映射合并A/B
先将A和B标记为同一分组,C保持原样,再按新分组字段与用户名聚合求和:
SELECT username, SUM(counts) AS catcount FROM ( SELECT username, counts, CASE WHEN cat IN ('A', 'B') THEN 'AB' ELSE cat END AS group_key FROM tableA ) t GROUP BY username, group_key
正确写法2:用UNION ALL拆分统计
分开统计A+B的求和结果,再与C的原始记录合并:
-- 统计A和B的求和结果 SELECT username, SUM(counts) AS catcount FROM tableA WHERE cat IN ('A', 'B') GROUP BY username UNION ALL -- 保留C的原始记录 SELECT username, counts AS catcount FROM tableA WHERE cat = 'C' ORDER BY username, catcount DESC
以上两种写法均可得到你期望的输出结果。
内容的提问来源于stack exchange,提问作者user1203397
相关产品推荐
相关产品推荐

