Laravel groupBy排名导致多个分组行

时间:2014-04-13 19:16:24

标签: mysql group-by laravel-4 ranking

我在查询中使用groupby()功能来获取两组运动员的统计数据。

我和我的运动员有一张桌子,还有一张有表演的桌子。

- athletes table
-- id
-- name
-- group_id

-performance table
-- id
-- DateTime
-- athlete_id
-- sport_id
-- time

每位运动员在多天内做同样的运动(对所有运动员来说都不一样)。 我希望看到特定运动中每组time average天数的变化。

我运行此查询

$query = '*, AVG(time) as average_time' ;
$Performance = Performance::join('athletes','performance.athlete_id','=','athletes.id')
                            ->select(\DB::raw($query))
                            ->where('performance.sport_id', '=', '43')
                            ->orderBy('group_id', 'asc')
                            ->groupBy('group_id')
                            ->get()
                            ->toArray();

然而,这给了我给定sport_id的平均值,但不是每天都有。

如何在给定的运动groupby group_id中查看每天的平均值?

1 个答案:

答案 0 :(得分:0)

如果DateTime是时间戳,那么您可以使用mysql日期函数。特别是GROUP BY WEEKDAY(timestamp_field)。

添加到您的查询中,它看起来像这样

$query = '*, AVG(time) as average_time' ;
$Performance = Performance::join('athletes','performance.athlete_id','=','athletes.id')
                            ->select(\DB::raw($query))
                            ->where('performance.sport_id', '=', '43')
                            ->orderBy('group_id', 'asc')
                            ->groupBy('WEEKDAY(DateTime)')
                            ->groupBy('group_id')
                            ->get()
                            ->toArray();