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) ->where('r.period_start', '>=', $startDate) ->where('r.period_end', '<', $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; } }