MySQL ROUND和AVG无法按预期工作

时间:2013-09-10 13:18:49

标签: php mysql sql codeigniter rounding

嗨,我想要使用mysql ROUNDAVG函数,

public function get_average_rating_by_specialty($shop_id,$where_array=array())
    {

        $this->replica->select('PreferenceToLOBID,PreferenceID , AVG(ROUND(AvarageRating)) as AvarageRating');
        $this->replica->from('*******');
        $this->replica->where(array('ShopID'=>$shop_id,'IsDelete'=>0));

        if($where_array)
        {
            $this->replica->where($where_array);
        }

        $this->replica->group_by('PreferenceID,PreferenceToLOBID');     
        $result = $this->replica->get();


        return $result->result_array();
    }

这里我试图获得AvarageRating值后的平均值,

我只有一条记录符合我在该行中的条件AvarageRating值为4.5

但查询结果为

Array
(
    [0] => Array
        (
            [PreferenceToLOBID] => 29
            [PreferenceID] => 654
            [AvarageRating] => 4.0000
        )

)

当我删除ROUND时,这可以正常工作,但我想在获得平均值之前对AvarageRating值进行舍入

在这种情况下,我希望4.5是结果,为什么它返回4

请提前帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

ROUND(AvarageRating,1)

那么你可以获得所需的4,5

答案 1 :(得分:1)

你要求它将4.5到0的小数位舍入,然后将其平均。

请参阅http://dev.mysql.com/doc/refman/5.1/en/mathematical-functions.html#function_round

WRT答案应该是4还是5,特别注意这部分文档:

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