【发布时间】:2019-07-26 09:00:52
【问题描述】:
当我必须总结并除以 100 时,我正在做一个 SQL 练习。我得到了我想要的(变量 TOTAL_AMT),但我想更好地理解为什么 TOTAL_AMT1 不正确:
在TOTAL_AMT像0.1这样小的输出中,TOTAL_AMT1只带0.0。这是为什么呢?
'SELECT
Extract (YEAR From CREATED_AT) AS YEAR_NO
,Extract (MONTH From CREATED_AT) AS MONTH_NO
,CURRENCY_ID
, Cast((Sum(AMOUNT )/100) AS DECIMAL(6,1)) AS TOTAL_AMT1
,(Sum(Cast(AMOUNT AS DECIMAL(6,1)))/100) AS TOTAL_AMT
FROM DDEWA03P.DW36991_SALES
GROUP BY 1,2,3
ORDER BY YEAR_NO,MONTH_NO,CURRENCY_ID ASC;'
谢谢!
【问题讨论】:
-
换个顺序,
CAST(SUM(AMOUNT) as DECIMAL(6,1)) / 100 -
因为整数/整数只返回结果的整数部分。
-
感谢@jarlh。这也有效。我的问题是为什么 TOTAL_AMT1 方式不会给出正确的数字。是关于变量类型的吗?
-
正如我所说,当您进行整数除法时,小数部分会丢失。你也必须强制小数除法才能得到小数。
-
谢谢!!男人! :) 回答
标签: sql teradata decimalformat variable-types