2011-12-14 48 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