2017-07-26 88 views
2

我如何能夠獲得最高記錄,例如前10名前5名前3名,我試圖在我的查詢中使用AVG,但它返回的是一個人的記錄。Laravel sql獲取最高記錄並獲得它的字段值平均值

SQL

if(!$field) { 
    $select = [ 
     DB::raw('AVG(sFieldGoalsPercentage) AS sFieldGoalsPercentage'), 
     DB::raw('AVG(sThreePointersPercentage) AS sThreePointersPercentage'), 
     DB::raw('AVG(sTwoPointersPercentage) AS sTwoPointersPercentage') 
    ]; 
} 

$player1 = DB::table('person_match_statistics') 
    ->where('competitionId', $competitionId) 
    ->where('personId', $player1Id) 
    ->where('periodNumber', 0) 
    ->orderBy('matchId', 'DESC') 
    ->select($select) 
    ->take($lastGame) 
    ->get(); 

陣列

0 => {#543 ▼ 
    +"sFieldGoalsPercentage": 0.56 
    +"sThreePointersPercentage": 0.5 
    +"sTwoPointersPercentage": 0.63 
} 
1 => {#536 ▼ 
    +"sFieldGoalsPercentage": 0.4 
    +"sThreePointersPercentage": 0.4 
    +"sTwoPointersPercentage": 0.4 
} 
2 => {#539 ▼ 
    +"sFieldGoalsPercentage": 0.38 
    +"sThreePointersPercentage": 0.2 
    +"sTwoPointersPercentage": 0.67 
} 
+0

使用分組by clause –

+0

什麼是最高記錄?你的桌子是什麼,你需要什麼? – apokryfos

+0

用戶的最高記錄 – PenAndPapers

回答

2

你可以使用avg()收集方法。獲得前十名記錄:

$player1 = DB::table('person_match_statistics') 
    ->where('competitionId', $competitionId) 
    ->where('personId', $player1Id) 
    ->where('periodNumber', 0) 
    ->latest('matchId') 
    ->select($select) 
    ->take(10) 
    ->get(); 

不使用take()avg()收集方法執行任何新的查詢然後計算平均值。例如:

$top10 = $player1->avg('column'); 
$top5 = $player1->take(5)->avg('column'); 
$top3 = $player1->take(3)->avg('column'); 
+1

非常感謝@AlexeyMezenin – PenAndPapers