You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:22:12