LoginSignup
0
0

More than 3 years have passed since last update.

CakePHP4 クエリビルダでの AVG と ROUND のやり方

Last updated at Posted at 2020-11-27

AVG で平均を取った後の、小数点以下の四捨五入についてのコードが公式含め見当たらなかったので書き残しておきます。MySQL前提です。

例えば以下の要件を満たす場合です。

  • 商品の評価の平均値
  • 小数点第一位で四捨五入したい

コード

        $query = $this->Products->find();
        $result = $query
            ->select([
                'average_evaluation_rating' => $query->func()->round([$query->func()->avg('Products.evaluation'), 1]),
            ])
(以下略)

解説

MySQLだと以下のように書くところを

ROUND(AVG(Products.evaluation), 1)

CakePHP4 だと以下のように書きます。

$query->func()->round([roundしたい内容, 四捨五入する小数点の位置])

AVG も関数を使って書くべきなので、round したい内容に

$query->func()->avg('Products.evaluation')

と書いています。

実行されるクエリ

SELECT 
    (round(AVG(Products.evaluation), '1')) AS average_evaluation_rating
FROM
    products Products
(以下略)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0