mysql中sum和union_SQL Server UNION ALL 结果 SUM函数造成精度丢失

SQL Server 数据类型

使用场景:

在进行多维度汇总数据时,需要将不同数据类型,不同数据精度的数据合并成一张表时,相关计算出现精度丢失问题。

问题排查:

在进行分段排查后,找到丢失原因,SUM函数造成精度丢失

场景在现:

1. 创建表

CREATE TABLE A_TEST

(

ID_CODE NVARCHAR(10),

VAR1 DECIMAL(17,0)  -- DECIMAL(17,0) 做为数量使用 小数位为0,※1 问题

)

CREATE TABLE B_TEST

(

ID_CODE NVARCHAR(10),

VAR2 DECIMAL(19,4)  -- 带小数位

)

CREATE TABLE C_TEST

(

ID_CODE NVARCHAR(10),

VAR3 INT -- 整型 例证

)

2. 插入数据

INSERT INTO A_TEST SELECT 'A001',17 ;

INSERT INTO B_TEST SELECT 'B001',123.4567 ;

INSERT INTO C_TEST SELECT 'C001',15 ;

3. SQL各出力结果

①  出力 .0000

select var1 from A_TEST -- DECIMAL(17,0)

union all

select var2 from B_TEST -- DECIMAL(19,4)

7320317c80f364bfc4c4d5a034a4a7d6.png

②  SUM 函数使用对 DECIMAL(17,0)的影响  出力 x 1

select sum(var1) from A_TEST

union all

select var2 from B_TEST

0f6b4cc8289d73edc7bd608ef2088f99.png

③ SUM函数使用对 DECIMAL(19,4)的影响 出力 .0000

select var1 from A_TEST

union all

select sum(var2) from B_TEST

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值