Laravel groupBy rank导致多个分组行



我在查询中使用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每天的平均值?

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

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

$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();

最新更新