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

SQL实现仅对列中整数求和,保留带小数原数值的方法

解决方案

首先,你的原始列数据是带逗号后缀的字符串类型,需要先清理掉末尾的逗号,再准确判断哪些是整数,最后实现“小数保留原值、整数参与求和”的需求。

问题分析

你之前的SQL错误在于:

  • 用col not like '%,%'判断整数,但大部分整数行(比如1,、2,)本身包含逗号,导致这些行被排除在求和外,只匹配到无逗号的5。
  • 使用SUM()聚合函数会将所有行合并为一行,无法保留小数行的原始输出。

具体实现

根据你的需求,分两种常见场景给出SQL:

场景1:输出原始值+整数总和两列

这种方式会保留所有行的原始数据,同时额外显示所有整数的总和:

SELECT
    -- 清理末尾逗号,得到原始数值字符串
    TRIM(TRAILING ',' FROM col) AS original_value,
    -- 子查询计算所有整数的总和
    (SELECT SUM(CAST(TRIM(TRAILING ',' FROM col) AS DECIMAL(10,2)))
     FROM your_table
     -- 严谨判断是否为整数:转换为数值后等于其整数部分(兼容如'1.00,'这类带小数点但值为整数的情况)
     WHERE CAST(TRIM(TRAILING ',' FROM col) AS DECIMAL(10,2)) = FLOOR(CAST(TRIM(TRAILING ',' FROM col) AS DECIMAL(10,2)))) AS integer_total
FROM your_table;

执行后结果:

original_valueinteger_total
18
28
1.028
2.238
58

场景2:输出一列,小数保留原值,整数行显示总和

这种方式会将所有整数行替换为总和,小数行保留原始值:

SELECT
    CASE
        WHEN CAST(TRIM(TRAILING ',' FROM col) AS DECIMAL(10,2)) = FLOOR(CAST(TRIM(TRAILING ',' FROM col) AS DECIMAL(10,2)))
            THEN CAST((SELECT SUM(CAST(TRIM(TRAILING ',' FROM col) AS DECIMAL(10,2))) FROM your_table WHERE CAST(TRIM(TRAILING ',' FROM col) AS DECIMAL(10,2)) = FLOOR(CAST(TRIM(TRAILING ',' FROM col) AS DECIMAL(10,2)))) AS VARCHAR(20))
        ELSE TRIM(TRAILING ',' FROM col)
    END AS result
FROM your_table;

执行后结果:

result
8
8
1.02
2.23
8

注意事项

  • 替换your_table为你的实际表名,col为目标列名。
  • DECIMAL(10,2)可根据你的数据精度调整,比如如果有更多小数位,可改为DECIMAL(10,4)。

内容的提问来源于stack exchange,提问作者pavan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:27:38