使用SQLite3与DBeaver时SQL SUM函数返回错误值的问题
问题分析与解决方案
核心原因
你看到的377,839,000和793,256,000是DBeaver的千位分隔符格式化显示,而非数据库实际存储的数值。你的Value字段虽然定义为INTEGER,但实际存储的是377和793——这是因为插入数据时输入了带逗号的字符串,SQLite会自动截断非数字部分,仅保留第一个逗号前的数字转换为整数存储,最终SUM(377+793)=1170,和你得到的结果完全匹配。
验证方法
执行以下SQL查询原始存储值(绕过DBeaver的格式化显示):
SELECT Year, CAST(Value AS TEXT) FROM your_table WHERE Year = 2022;
如果返回的是377和793,就确认了数据存储错误。
解决步骤
- 修正现有数据:更新错误的存储值为完整整数(注意不要带千位分隔符):
UPDATE your_table SET Value = 377839000 WHERE Year = 2022 AND Value = 377; UPDATE your_table SET Value = 793256000 WHERE Year = 2022 AND Value = 793; - 规范数据插入:后续插入数据时,直接输入纯整数(如
377839000),不要添加千位分隔符或其他非数字字符。 - 调整DBeaver显示设置:可以在DBeaver的「数据显示」设置中关闭自动千位分隔符,避免混淆显示值和实际存储值。
排除其他可能性
SQLite的INTEGER类型支持最大9e18的整数,不会因数值过大溢出;SUM/AVG等聚合函数对整数的计算是精确的,因此不存在数据库本身的设置问题或逻辑错误,完全是数据插入阶段的格式错误导致的。
内容的提问来源于stack exchange,提问作者Ryan Lafayette
相关产品推荐
相关产品推荐

