2017-07-06 55 views
0

我有一個數據庫表,其中包含針對玩家的點數。單個玩家在表格中有多個記錄。我需要通過player_id對記錄進行分組。我試圖獲得每組的前3條記錄的平均值。我在最後一個晚上試圖達到這個目標。但我沒有任何運氣來解決這個問題。Laravel如何獲得來自每個組的前3條記錄的AVG值

這是我最初的代碼,我需要修改此得到的第一個3個記錄每個組(由player_id分組)

$oSelect = DB::table('statistics') 
      ->where('statistics.league_id', $league_id) 
      ->select('id, AVG('statistics.points as points'),player_id, scheduled') 
      ->orderBy('statistics.scheduled','DESC') 
      ->groupBy('statistics.player_id'); 

謝謝你在先進

回答

0

試試這個的AVG:

$oSelect = DB::table('statistics') 
     ->select(DB::raw('id, AVG(statistics.points) as points,player_id,scheduled')) 
     ->where('statistics.league_id', $league_id) 
     ->orderBy('statistics.scheduled','DESC') 
     ->groupBy('statistics.player_id')->limit(3)->get(); 

注意:如果你非聚合列錯誤情況下,必須ID列添加到由列列表或禁用次分組E在MYSQL only_full_group_by選項

Disable ONLY_FULL_GROUP_BY

+0

外貌,你誤會我的問題。我想要的不是限制整個數據集,而是限制每個組。 (獲得每個玩家的前3條記錄並獲得AVG) –

+0

對此我很抱歉,但是您的示例代碼不正確,並且根據您的要求過於簡單。但我可以說使用Laravel DB Facade來解決這個複雜的問題可能會弄亂你的代碼,並且不合邏輯。所以我建議你使用存儲過程,並簡單地從你的代碼端調用函數。如果您想知道如何限制每個組的記錄,請查看此頁面: –

+0

https://stackoverflow.com/questions/12113699/get-top-n-records-for-each-group-of-grouped-results –

相關問題