我在查询中使用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
中查看每天的平均值?
答案 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();