1

嗨,我正在使用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

请帮助,在此先感谢。

4

2 回答 2

1

ROUND(AvarageRating,1)

那么你可以得到想要的 4,5

于 2013-09-10T13:23:44.277 回答
1

您要求将 4.5 舍入到小数点后 0 位,然后取平均值。

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

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

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

于 2013-09-10T13:24:17.887 回答