具有相同id的求和行(mysql)

时间:2011-12-14 17:28:13

标签: mysql sum

(最后一篇)我想用相同的user_id求和行(对于列的思考,我不需要有其他列,只需要user_id和思考)

enter image description here

我的查询

SELECT  students_group.user_id,scores.result ,exam.name,exam.ponderation,exam.id, (scores.result * exam.ponderation) / totpond.totalpond as ponderation
from (
select sum(exam.ponderation)  as totalpond from scores
left join exam on exam.id = scores.exam_id
left join teacher_group on teacher_group.id = exam.teacher_group_id
left join groups on  groups.id = teacher_group.group_school_id
left join students_group on students_group.user_id = scores.user_id
where teacher_group.id = 54
group by students_group.user_id

 ) as totpond,scores
left join exam on exam.id = scores.exam_id
left join teacher_group on teacher_group.id = exam.teacher_group_id
left join groups on  groups.id = teacher_group.group_school_id
left join students_group on students_group.user_id = scores.user_id

where teacher_group.id = 54
group by scores.id
order by students_group.user_id

是否可以使用我的查询或需要使用PHP?有谁可以帮助我吗 ? thx:)

2 个答案:

答案 0 :(得分:1)

您可以将当前查询用作子查询,并汇总结果,如下所示:

 SELECT 
       tmp.user_id,
       SUM(tmp.aggregate_ponderation) as ponderation
    FROM
    (
    SELECT  students_group.user_id,scores.result ,exam.name,exam.ponderation,exam.id, (scores.result * exam.ponderation) / totpond.totalpond as aggregate_ponderation
    from (
    select sum(exam.ponderation)  as totalpond from scores
    left join exam on exam.id = scores.exam_id
    left join teacher_group on teacher_group.id = exam.teacher_group_id
    left join groups on  groups.id = teacher_group.group_school_id
    left join students_group on students_group.user_id = scores.user_id
    where teacher_group.id = 54
    group by students_group.user_id

     ) as totpond,scores
    left join exam on exam.id = scores.exam_id
    left join teacher_group on teacher_group.id = exam.teacher_group_id
    left join groups on  groups.id = teacher_group.group_school_id
    left join students_group on students_group.user_id = scores.user_id

    where teacher_group.id = 54
    group by scores.id
    ) tmp
    GROUP BY
      tmp.user_id

答案 1 :(得分:1)

您无需在查询中添加该字段的总和:

 SELECT 
       tmp.user_id,
       SUM(tmp.ponderation) as total_ponderation,
       SUM(tmp.aggregate_ponderation) as ponderation
    FROM
    (
    SELECT  students_group.user_id,scores.result ,exam.name,exam.ponderation,exam.id, (scores.result * exam.ponderation) / totpond.totalpond as aggregate_ponderation
    from (
    select sum(exam.ponderation)  as totalpond from scores
    left join exam on exam.id = scores.exam_id
    left join teacher_group on teacher_group.id = exam.teacher_group_id
    left join groups on  groups.id = teacher_group.group_school_id
    left join students_group on students_group.user_id = scores.user_id
    where teacher_group.id = 54
    group by students_group.user_id

     ) as totpond,scores
    left join exam on exam.id = scores.exam_id
    left join teacher_group on teacher_group.id = exam.teacher_group_id
    left join groups on  groups.id = teacher_group.group_school_id
    left join students_group on students_group.user_id = scores.user_id

    where teacher_group.id = 54
    group by scores.id
    ) tmp
    GROUP BY
      tmp.user_id