SQL多条件列统计:按Subtype用不同公式计算并汇总计数
解决思路与SQL实现
直接用条件聚合就能搞定这个需求,不用复杂的分组或多次查询,核心是用SUM()搭配CASE语句,按规则计算每行的贡献值后汇总。
完整查询语句
SELECT -- Category A的Subtype1+Subtype2总计数 SUM(CASE WHEN Category = 'A' AND Subtype = 1 THEN 0.5 WHEN Category = 'A' AND Subtype = 2 THEN 1 ELSE 0 END) AS A_Total_Count, -- Category B的Subtype1+Subtype2总计数 SUM(CASE WHEN Category = 'B' AND Subtype = 1 THEN 0.5 WHEN Category = 'B' AND Subtype = 2 THEN 1 ELSE 0 END) AS B_Total_Count, -- 仅Category A的Subtype1计数 SUM(CASE WHEN Category = 'A' AND Subtype = 1 THEN 0.5 ELSE 0 END) AS A_Subtype1_Count, -- 仅Category B的Subtype1计数 SUM(CASE WHEN Category = 'B' AND Subtype = 1 THEN 0.5 ELSE 0 END) AS B_Subtype1_Count FROM your_table_name; -- 替换成你的实际表名
逻辑拆解
- Subtype=1时,每行按0.5计算(等价于行数除以2);Subtype=2时每行按1计算(等价于行数本身)。
- 每个
SUM(CASE...)对应一个统计项,只累加符合条件的行的贡献值,其他行加0不影响最终结果。 - 一次查询就能输出所有需要的统计值,无需反复扫描表,效率更高。
可选调整
如果需要整数结果(比如Subtype1的行数为偶数时取整),可以给SUM结果套上FLOOR()或ROUND()函数:
-- 示例:向下取整为整数 FLOOR(SUM(CASE WHEN Category = 'A' AND Subtype = 1 THEN 0.5 ELSE 0 END)) AS A_Subtype1_Count
内容的提问来源于stack exchange,提问作者anthonyStark
相关产品推荐
相关产品推荐

