具有ROUND功能的mysql avg函数

时间:2012-02-16 12:06:44

标签: mysql

在mysql查询中我使用过

avg(column_name)  

返回值12.50但是如果我舍入到平均功能

ROUND(avg(column_name))

然后它返回值12,但它必须是13。我不知道为什么它会返回12而不是13

如果我ROUND(12.50),则返回值“13”和avg(column_name),即12.50。当我做ROUND(avg(column_name))时返回值“12”。我认为在这两种情况下输出都需要为“13”。

4 个答案:

答案 0 :(得分:3)

http://dev.mysql.com/doc/refman/5.0/en/precision-math-rounding.html

  

从MySQL 5.0.3开始,ROUND()根据使用以下规则   第一个参数的类型:

     

对于精确值数字,ROUND()使用“round half up”或“round”   最近的“规则:小于0.5或更大的部分的值   如果是正数或下一个整数,则向上舍入到下一个整数   如果为负则为整数(换句话说,它从零开始舍入。)   小于.5的小数部分的值向下舍入到下一个   如果为正则为整数,如果为负则为整数。

     

对于近似值数字,结果取决于C库。上   很多系统,这意味着ROUND()使用“round to even even”   rule:具有任何小数部分的值四舍五入到最接近的偶数   整数。

     

以下示例显示精确和舍入的舍入方式有何不同   近似值:

mysql> SELECT ROUND(2.5), ROUND(25E-1);
+------------+--------------+
| ROUND(2.5) | ROUND(25E-1) |
+------------+--------------+
| 3          |            2 |
+------------+--------------+

答案 1 :(得分:0)

不确定这是否属于您的情况,但这是MySQL documentation

中的内容
  

对于近似值数字,结果取决于C库。上   很多系统,这意味着ROUND()使用“round to even even”   rule:具有任何小数部分的值四舍五入到最接近的偶数   整数。

答案 2 :(得分:0)

试试这个:

FLOOR(avg(column_name) + 0.5)

答案 3 :(得分:0)

尝试一下:

ROUND(cast(avg(column_name) as decimal))

更多信息Rounding Behavior

感谢引用472084itsmeee