日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql union all sum_[数据库]SQL Server UNION ALL 结果 SUM函数造成精度丢失

發(fā)布時(shí)間:2024/10/8 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql union all sum_[数据库]SQL Server UNION ALL 结果 SUM函数造成精度丢失 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

[數(shù)據(jù)庫(kù)]SQL Server UNION ALL 結(jié)果 SUM函數(shù)造成精度丟失

0 2020-08-03 18:00:30 SQL Server 數(shù)據(jù)類型

使用場(chǎng)景:

在進(jìn)行多維度匯總數(shù)據(jù)時(shí),需要將不同數(shù)據(jù)類型,不同數(shù)據(jù)精度的數(shù)據(jù)合并成一張表時(shí),相關(guān)計(jì)算出現(xiàn)精度丟失問題。

問題排查:

在進(jìn)行分段排查后,找到丟失原因,SUM函數(shù)造成精度丟失

場(chǎng)景在現(xiàn):

1. 創(chuàng)建表

CREATE TABLE A_TEST

(

ID_CODE NVARCHAR(10),

VAR1 DECIMAL(17,0)? -- DECIMAL(17,0) 做為數(shù)量使用 小數(shù)位為0,※1 問題

)

CREATE TABLE B_TEST

(

ID_CODE NVARCHAR(10),

VAR2 DECIMAL(19,4)? -- 帶小數(shù)位

)

CREATE TABLE C_TEST

(

ID_CODE NVARCHAR(10),

VAR3 INT -- 整型 例證

)

2. 插入數(shù)據(jù)

INSERT INTO?A_TEST SELECT 'A001',17 ;

INSERT INTO?B_TEST SELECT?'B001',123.4567 ;

INSERT INTO C_TEST SELECT 'C001',15 ;

3. SQL各出力結(jié)果

①? 出力 .0000

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

union all

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

②? SUM 函數(shù)使用對(duì) DECIMAL(17,0)的影響 ?出力 x 1

select sum(var1) from A_TEST

union all

select var2 from B_TEST

③ SUM函數(shù)使用對(duì) DECIMAL(19,4)的影響 出力 .0000

select var1 from A_TEST

union all

select sum(var2) from B_TEST

④? INT 數(shù)據(jù)類型 出力? .0000

-- C_TEST 使用

select var3 from C_TEST

union all

select var2 from B_TEST

⑤? INT 數(shù)據(jù)類型 SUM函數(shù)使用對(duì)結(jié)果影響

select sum(var3) from C_TEST

union all

select var2 from B_TEST

⑥? sum() count() avg() max() min()

select 'sum',sum(15.12)

union all

select 'sum',14.2222

select 'count',count(15.12)

union all

select 'count',14.2222

select 'avg',avg(18.66)

union all

select 'avg',14.2222

select 'max',max(18.66)

union all

select 'max',14.2222

select 'min',min(18.66)

union all

select 'min',14.2222

結(jié)果說明:

通過上述①-⑤例子,可以看出只有在DECIMAL(17,0)數(shù)據(jù)類型下,使用了SUM函數(shù),出力的結(jié)果才會(huì)發(fā)生預(yù)想外的改變 (預(yù)想 .0000 出力 實(shí)際 x1 出力)

這里感覺DECIMAL(17,0)情況下sum 函數(shù)會(huì)自動(dòng)將當(dāng)前小數(shù)位截取掉,和其他類型不在做合并計(jì)算,不會(huì)產(chǎn)生多位,或者按最大位數(shù)展示出力結(jié)果

而在union all 時(shí),就按多SQL的最小精度出力,所以,當(dāng)有SUM(DECIMAL(17,0))情況出現(xiàn)時(shí),UNION ALL的結(jié)果集就是沒有小數(shù)位

⑥這個(gè)例子是除了sum() 函數(shù)以外union all的情況,可以看到AVG()函數(shù)是union all 的2條SQL文的精度和其余的都按照最大精度走

※ 這里暫時(shí)說明的是 SQL Server 之后會(huì)對(duì)比ORACLE MySQL 等基本數(shù)據(jù)庫(kù) (這里注明之后補(bǔ)充案例,ORACLE中,SUM(NUMBER(7,0))在做UNION? ALL不會(huì)取到 x1這樣的出力結(jié)果?)

本文網(wǎng)址:http://www.shaoqun.com/a/463890.html

*特別聲明:以上內(nèi)容來(lái)自于網(wǎng)絡(luò)收集,著作權(quán)屬原作者所有,如有侵權(quán),請(qǐng)聯(lián)系我們:admin@shaoqun.com。

sql

0

總結(jié)

以上是生活随笔為你收集整理的mysql union all sum_[数据库]SQL Server UNION ALL 结果 SUM函数造成精度丢失的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。