2014-04-09 2 views
2

두 개의 테이블 Workplans and Progress가 있습니다. 다음은 작업 계획 테이블입니다.laravel의 데이터베이스 평균치 4

업무 계획 테이블 :

ID

division_name

division_chief

진행 테이블 :

ID

,174,

이 workplan_id는 업무 계획 테이블의 외래 키 여기에 foreign_key

을 workplan_id 점수.

이제 division_name별로 진도표 그룹의 평균을 얻고 싶습니다. 그러나 나는 정말로 나의 질문에 혼란 스럽다.

$report = DB::table('workplans') 
    ->join('progress','workplans.id','=','progress.workplan_id') 
    ->avg('progress.score') 
    ->groupBy('workplans.division_name') 
    ->get(); 

    dd($report); 
+0

조인은 progress.id를 사용하지만 외래 키는 workplan_id라고합니다. 그냥 그게 실수인지 여부를 확인하기 위해 당신이 화가 났거나 그것이 문제가있는 이유라면 – dops

+0

죄송합니다 !! 내 나쁜 내가 방금 편집했습니다 – user3515413

답변

1

원하는 SQL은 ...이 같은 것입니다

SELECT workplans.division_name, AVG(progress.score) as average_score 
FROM `workplans` 
LEFT JOIN `progress` ON progress.workplan_id = workplans.id 
GROUP BY workplans.id 
laravel 쿼리 빌더와

...

$report = DB::table ('workplans') 
    ->join ('progress', 'progress.workplan_id', '=', 'workplans.id') 
    ->select ('workplans.division_name', DB::raw ('AVG(progress.score) as average_score')) 
    ->groupBy ('workplans.id') 
    ->get(); 

그래서

Array 
(
    [0] => stdClass Object 
     (
      [division_name] => Division 1 
      [average_score] => 10 
     ) 

    [1] => stdClass Object 
     (
      [division_name] => Division 2 
      [average_score] => 20 
     ) 

) 

의 문제 ... 점수 5, 15, 점수 15 및 25이 반환과 부문 2 부문 (1)에 대한 쿼리는 평균 집계 함수가 테이블의 모든 열에 대한 평균 값을 반환하고 쿼리에 대한 참조는 반환하지 않으므로 추가 함수를 계속 연결할 수 있습니다. 이에 대한 해결책은 DB :: raw 메소드를 사용하여 MySQL AVG 함수를 사용하여 평균을 수동으로 지정하는 것입니다.

0

내가 Laravel의 쿼리 빌더를 사용하여 작성하는 방법을 잘 모르겠지만, 정적 MySQL의 쿼리는 쉬울 수 있습니다 : 나는 무엇 짓을한다

$report = DB::select("SELECT AVG(progress.score) AS 'avg' FROM workplans JOIN progress ON workplans.id=progress.activity_id GROUP BY workplans.division_name;"); 
1

시도는 원료 선택을 통해 그것을 할 :

$report = DB::table('workplans') 
    ->join('progress','workplans.id','=','progress.activity_id') 
    ->select(DB::raw('avg(progress.score) as avg_progress_score')) 
    ->groupBy('workplans.division_name') 
    ->get(); 
+0

또한 액세스 할 수 있도록 -> 선택 (DB :: raw ('평균 (progress.score) as averageScore')) – dops

+0

나는 방금 동의합니다. –

+0

고맙다 친구! – user3515413