MySQL求和、加入和分组方式。。。适当结构
我在浏览表和使用Laravel 4 Fluent将SQL语句按团队id分组时遇到了一些问题。如果我通过删除组,我将获得每个用户的总步骤。但我需要的是每个团队的总步骤 SQL语句: 不带分组依据的输出: 期望输出:MySQL求和、加入和分组方式。。。适当结构,mysql,sql,laravel,laravel-4,Mysql,Sql,Laravel,Laravel 4,我在浏览表和使用Laravel 4 Fluent将SQL语句按团队id分组时遇到了一些问题。如果我通过删除组,我将获得每个用户的总步骤。但我需要的是每个团队的总步骤 SQL语句: 不带分组依据的输出: 期望输出: 您应该在单个查询中使用GROUPBY,而不是以嵌套方式进行嵌套。 这里有一种方法: SELECT `user_challenge`.`team_id` , `teams`.`name` , SUM(`userStepSum`) as `TeamStepSum` FROM `use
您应该在单个查询中使用GROUPBY,而不是以嵌套方式进行嵌套。 这里有一种方法:
SELECT `user_challenge`.`team_id` , `teams`.`name` , SUM(`userStepSum`) as `TeamStepSum`
FROM `user_challenge`
INNER JOIN `users` ON `user_challenge`.`user_id` = `users`.`id`
INNER JOIN `teams` ON `user_challenge`.`team_id` = `teams`.`id`
INNER JOIN
(
SELECT activities.user_id, SUM( activities.steps ) as `userStepSum`
FROM activities
where
AND activities.created_at <= '2013-11-30 15:32:45'
AND activities.date >= '2013-10-01 15:32:45'
AND activities.date <= '2013-11-30 15:32:45'
GROUP BY `activities`.`user_id`
) `user_steps` on `user_steps`.`user_id` = `user_challenge`.`user_id`
WHERE `user_challenge`.`challenge_id` =2
AND `user_challenge`.`team_id` IS NOT NULL
GROUP BY `user_challenge`.`team_id`
你也可以直接参加活动。祝你好运。如果你不需要laravel fluent特定的解决方案,你不需要问题中包含的laravel标签。。。
$subquery = "(SELECT SUM(activities.$type) FROM activities WHERE activities.user_id = users.id AND activities.created_at <= '". $challenge->end_date ."' AND activities.date >= '". $challenge->start_date ."' AND activities.date <= '". $challenge->end_date ."') as $type";
$teams = DB::table('user_challenge')
->where('user_challenge.challenge_id', $challenge->id)
->whereNotNull('user_challenge.team_id')
->join('users','user_challenge.user_id','=','users.id')
->join('teams','user_challenge.team_id','=','teams.id')
->select('user_challenge.team_id', 'teams.name',DB::raw($subquery))
->groupBy('user_challenge.team_id')
->get();
team_id, name, steps
1, Team 1, null
team_id, name, steps
1, Team 1, null
1, Team 1, 13000
1, Team 1, 10000
team_id, name, steps
1, Team 1, 23000
SELECT `user_challenge`.`team_id` , `teams`.`name` , SUM(`userStepSum`) as `TeamStepSum`
FROM `user_challenge`
INNER JOIN `users` ON `user_challenge`.`user_id` = `users`.`id`
INNER JOIN `teams` ON `user_challenge`.`team_id` = `teams`.`id`
INNER JOIN
(
SELECT activities.user_id, SUM( activities.steps ) as `userStepSum`
FROM activities
where
AND activities.created_at <= '2013-11-30 15:32:45'
AND activities.date >= '2013-10-01 15:32:45'
AND activities.date <= '2013-11-30 15:32:45'
GROUP BY `activities`.`user_id`
) `user_steps` on `user_steps`.`user_id` = `user_challenge`.`user_id`
WHERE `user_challenge`.`challenge_id` =2
AND `user_challenge`.`team_id` IS NOT NULL
GROUP BY `user_challenge`.`team_id`