我在查询中使用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();