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ます。

その行の条件に一致するレコードは 1 つだけです。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を参照してください

答えが 4 か 5 かの WRT については、ドキュメントの次の部分に特に注意してください。

「近似値の数値の場合、結果は C ライブラリに依存します。多くのシステムでは、これは、ROUND() が「最も近い偶数に丸める」規則を使用することを意味します。小数部分を含む値は、最も近い偶数の整数に丸められます。」

于 2013-09-10T13:24:17.887 に答える