join('metrika_results as mr', 'r.report_id', '=', 'mr.rf_report_id') ->whereIn('r.rf_department_id', $departmentIds) ->where('mr.rf_metrika_item_id', 18) // ->whereBetween('r.created_at', [$startDate, $endDate]) ->where('r.sent_at', '>', $startDate) ->where('r.sent_at', '<=', $endDate) ->select( 'r.rf_department_id', DB::raw('AVG(CAST(mr.value AS DECIMAL)) as avg_value') ) ->groupBy('r.rf_department_id') ->get() ->keyBy('rf_department_id'); $averages = []; foreach ($departmentIds as $deptId) { $averages[$deptId] = isset($results[$deptId]) ? round((float)$results[$deptId]->avg_value, 1) : 0; } return $averages; } }