2017-07-26 51 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