2017-07-06 38 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 –

相关问题