Laravel 查询生成器中计算的第二个平均值的平均值

Average of a calculated second average in Laravel Query Builder

我有 3 个表:约会、评论、Review_ratings

每个 review_ratings 都有一个评级值。每个评论都有很多 review_ratings 最后,每个约会都有很多评论。

我想做的是计算每个评论review_ratings的平均值,然后计算评论总评分的平均值,看它是否高于特定整数。

例子: 预约 ID:1,有 2 条评论,每条评论有 review_rating 4 和 3 之一,评论评分 2 为 5 和 5。

AVG(review_ratings) 应该 return average(5,5) 和 average(4,3) 之间的平均值是 3.5 然后 AVG(the_first_avg) 应该 return 平均值 (3.5,5) 即 4.25.

我最后测试的查询是:

if($minRating > 0){

                    $search->join('appointments','appointments.doctor_id','users.id')
                    ->join('reviews','reviews.appointment_id','appointments.id')
                    ->join('review_ratings','review_ratings.review_id','reviews.id')
                    ->addSelect(array('review_ratings.id',
                        DB::raw('AVG(review_ratings.rating) as review_ratings_count')
                     ))
                    ->addSelect(
                        DB::raw('AVG(review_ratings_count) as ratings_avg')
                     )
                    ->where('ratings_avg','>=',$minRating)
                    ;

                }

我得到的错误是

Column not found: 1054 Unknown column 'review_ratings_count' in 'field list'

我发现解决方案比我的代码简单得多,并且使用 AVG(name_of_column) 而不是使用 'AS' 值

->selectRaw('AVG(review_ratings.rating) as overall_rating')
            ->when($minRating > 0, function ($query) use($minRating)
                {
                    $query->havingRaw('AVG(review_ratings.rating) >= ?', [$minRating]);
                })