久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

SQL Server UNION ALL 結(jié)果 SUM函數(shù)造成精度丟失

 python_lover 2022-03-08

使用場景:

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

 

問題排查:

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

 

場景在現(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é)果

 ?、?nbsp; 出力 .0000

  select var1 from A_TEST -- DECIMAL(17,0)
    union all
  select var2 from B_TEST -- DECIMAL(19,4)

  

  

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

  select sum(var1) from A_TEST
    union all
  select var2 from B_TEST

  

 

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

  select var1 from A_TEST
    union all
  select sum(var2) from B_TEST

  

 

 ?、?nbsp; INT 數(shù)據(jù)類型 出力  .0000

  -- C_TEST 使用
  select var3 from C_TEST
    union all
  select var2 from B_TEST

  

 

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

  select sum(var3) from C_TEST
    union all
  select var2 from B_TEST

  

 ?、?nbsp; 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é)果才會發(fā)生預(yù)想外的改變 (預(yù)想 .0000 出力 實(shí)際 x1 出力)

      這里感覺DECIMAL(17,0)情況下sum 函數(shù)會自動將當(dāng)前小數(shù)位截取掉,和其他類型不在做合并計(jì)算,,不會產(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 之后會對比ORACLE MySQL 等基本數(shù)據(jù)庫 (這里注明之后補(bǔ)充案例,,ORACLE中,SUM(NUMBER(7,0))在做UNION  ALL不會取到 x1這樣的出力結(jié)果 )

 

 

 

 

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多