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 documentation,FLOAT
不是与 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.
我正在查询以收集 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 documentation,FLOAT
不是与 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.