2011-12-14 7 views
0

(последний) я хотел бы подвести ряд с тем же user_id (за весомость колонки, я не нужно иметь другую колонку, только user_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? Может кто-то мне помочь, пожалуйста ? ТНХ :)

+0

Последнее, Сорри – user1029834

ответ

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

kk thx, но мне нужно поместить результат total_ponderation, который вы просто добавили, и поместите его в totpond.totalpond (в моей формуле (scores.result * exam.ponderation)/totpond.totalpond as как aggregate_ponderation) – user1029834

+0

Я согласен, что вы вопрос, и я отправлю еще один вопрос о стеке для моей следующей части. Thx для вас помощь! знак равно – user1029834

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 the lots! работа отлично :) – user1029834

+0

.... ой .... только один вопрос litle ... мой totalpond не работает, мне нужно, например, суммировать поле ponderation для одного и того же пользователя _id (например, 20 + 15 для user_id 82) , Мне нужно сделать другой подзапрос? – user1029834

Смежные вопросы