1

我正在处理有关收集 Microsoft Parallel 数据仓库 (PDW) 上的一些数据的查询。

部分查询如下——

Select

min(rows) as rows_min,

max(rows) as rows_max,

sum(rows) as rows_total,

cast((((max(rows)-min(rows))/sum(rows))*100) as float) as SkewPct;

from .....;

显然查询没有显示任何错误。它运行成功,但所有列中的数据都正确,但 SkewPct 仅显示零。

请帮我解决这个问题!

4

2 回答 2

0

I think you are missing multiplication of 1.0 during divide as below:

cast((((max(rows)-min(rows))/(sum(rows)*1.0))*100) as float) as SkewPct;

Divide removes the fraction before converting it into float

于 2017-05-20T10:16:44.440 回答
0

根据 MySQL文档FLOAT不是使用 with 的有效类型CAST,您应该使用DECIMAL最大位数 (M) 和十进制 (D) 作为 tw 参数:

产生一个 DECIMAL 值。如果给出了可选的 M 和 D 值,它们指定最大位数(精度)和小数点后的位数(小数位数)。

默认情况下,值将四舍五入到int小数点后 0。看看下面的查询:

SELECT CAST((((127-23)/541)*100) as DECIMAL), CAST(19.2237 AS DECIMAL(7, 5))

第一列导致,19而第二列导致19.2237.

这是SQL Fiddle

于 2017-05-20T10:22:26.473 回答