如何在SQL中按三种类型分别对value列求和并返回多列结果?
正确实现按类型分组求和并横向展示的SQL方法
方法一:条件聚合(通用兼容写法)
这是最通用的实现方式,几乎所有关系型数据库都支持,无需复杂关联,直接在聚合函数中通过条件筛选目标数据:
SELECT SUM(CASE WHEN Type = 'Business' THEN value ELSE 0 END) AS business_total, SUM(CASE WHEN Type = 'Enterprise' THEN value ELSE 0 END) AS enterprise_total, SUM(CASE WHEN Type = 'Basic' THEN value ELSE 0 END) AS basic_total FROM your_table_name;
原理:CASE语句仅保留对应Type的value值,其他类型返回0,SUM函数累加时自然只会计算目标类型的总和,避免了多CTE关联可能带来的笛卡尔积或重复计算问题。
方法二:使用PIVOT语法(适用于SQL Server/Oracle等支持的数据库)
如果你的数据库支持PIVOT操作,可以通过行转列的方式实现:
SELECT Business, Enterprise, Basic FROM ( SELECT Type, value FROM your_table_name ) AS source_data PIVOT ( SUM(value) FOR Type IN (Business, Enterprise, Basic) ) AS pivot_result;
关于你之前CTE方法出错的原因
用多个CTE分别计算单类型总和再关联时,若采用交叉连接(无关联条件),虽然结果行数为1,但如果CTE内部的筛选逻辑有误(比如未正确过滤Type),或关联方式不当,会导致数值被重复计算。而上述两种方法都是在单次表扫描中完成所有聚合,效率更高且结果准确。
内容的提问来源于stack exchange,提问作者José Erildo
相关产品推荐
相关产品推荐

