SQL: select 语句中聚合函数的算术运算显示错误信息

SQL: Arithmetic operations on aggregate functions in a select statement shows wrong information

我正在查询以收集 Microsoft 并行数据仓库 (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 外,所有列中的数据均正确。

请帮我解决这个问题!

我认为你在除法期间缺少 1.0 的乘法,如下所示:

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

除法在将分数转换为浮点数之前删除分数

根据 MySQL documentationFLOAT 不是与 CAST 一起使用的有效类型,您应该改用 DECIMAL,最大位数(M) 和十进制 (D) 作为两个参数:

Produces a DECIMAL value. If the optional M and D values are given, they specify the maximum number of digits (the precision) and the number of digits following the decimal point (the scale).

默认情况下,值将四舍五入为 int,保留 0 位小数。看看下面的查询:

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

第一列结果为 19,而第二列结果为 19.2237

这是SQL Fiddle.