2

我遇到了 MySQLROUND()函数的问题。这里是:

当我这样做时:

SELECT ROUND(7/2) as avg FROM bla blah

平均为 4

当我这样做时:

 SELECT ROUND(SUM(marks)/COUNT(marks)) as avg

avg 是 3 注意:SUM(marks)它自己给出 7 并COUNT(marks)给出 2 据我所知 ROUND(SUM(marks)/COUNT(marks))应该等于ROUND(7/2)

问题是什么?

4

3 回答 3

1

显然 MySQL 解释7/27.0/2.0并使用浮点数而不是整数进行计算,给出结果3.5而不是3.

当您使用sum结果的数据类型与字段相同时,您将使用整数进行计算,即7/2给出结果3

double在进行计算之前将值转换为:

SELECT ROUND(cast(SUM(marks) as double)/cast(COUNT(marks) as double)) as avg
于 2012-05-30T07:52:08.373 回答
0

MySql 数学运算创建浮点结果。

当使用浮点数时,7/2 可以表示为 3.4999999999999。四舍五入产生 3。

于 2012-05-30T07:46:52.787 回答
0

你可以使用CEILINGROUND除了它总是四舍五入到更大的最接近的整数)

SELECT CEILING(SUM(marks)/COUNT(marks)) as avg

应该为问题中指定的要求产生您想要的结果。

于 2012-05-30T07:56:40.073 回答