2011-12-14 47 views
0

(最后),我想总结与同USER_ID行(用于列思考,我不需要有其他的列,只USER_ID与思考)琛一行相同的ID(MySQL的)

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 :)

+0

最后,sorrry – user1029834 2011-12-14 18:02:27

回答

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 
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 
+0

woot thx很多!工作完美:) – user1029834 2011-12-14 18:50:03

+0

....哦....只是一个小问题...我totalpond不会工作,我需要例如总结ponderation领域为同一个用户_id(例如,20 + 15 user_id 82) ,我需要做另一个子查询? – user1029834 2011-12-14 19:01:54